g ++变量名称有长度限制吗?

时间:2010-04-21 10:23:30

标签: variables g++

见标题

和一些填充文字

处理最低正文的要求

我希望你现在快乐任意限制

3 个答案:

答案 0 :(得分:19)

简答:

长答案:
 是的,它必须足够小,以适应内存,但不是,不是真的。如果有一个内置限制(我不相信有)它是如此巨大,你真的很难达到它。

实际上,你让我非常好奇,所以我创建了以下Python程序来生成代码:

#! /usr/bin/env python2.6
import sys;
cppcode="""
#include <iostream>
#include <cstdlib>

int main(int argc, char* argv[])
{
     int %s = 0;
     return 0;
}
"""

def longvarname(n):
    str="x";
    for i in xrange(n):
        str = str+"0";
    return str;

def printcpp(n):
    print cppcode % longvarname(n);

if __name__=="__main__":
    if len(sys.argv)==2:
        printcpp(int(sys.argv[1]));

这将使用所需的长度变量名生成C ++代码。使用以下内容:

./gencpp.py 1048576 > main.cpp
g++ main.cpp -o main

上面没有问题(变量名大约是1MB)。我尝试了一个千兆字节,但我对字符串结构并不那么聪明,所以当gencpp.py花了太长时间我决定中止。

无论如何,我非常怀疑gcc为变量名称预先分配了1MB。它纯粹受到记忆的限制。

答案 1 :(得分:4)

另外一个问题是,一些链接器对损坏的名称的长度有限制。这往往是模板和嵌套类比标识符长度更多的问题,但要么可能触发问题

答案 2 :(得分:2)

我不知道限制是什么(或者是否存在限制),但我认为应该有一个限制,以便捕获病理代码,例如由失控代码生成器创建的。对于它的价值,C ++标准建议标识符长度的最小为1K。