views:

63

answers:

3

see title

and some filler text

to deal with the requirement of minimum body text

i hope you're happy now arbitrary limits

+3  A: 

Short Answer:
No

Long Answer:
Yes, it has to be small enough that it will fit in memory, but otherwise no, not really. If there is a builtin limit (I don't believe there is) it is so huge you'd be really hard-pressed to reach it.

Actually, you got me really curious, so I created the following Python program to generate code:

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

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]));

This generates C++ code using the desired length variable name. Using the following:

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

The above gives me no problems (the variable name is roughly 1MB in length). I tried for a gigabyte, but I'm not being so smart with the string construction, and so I decided to abort when gencpp.py took too long.

Anyway, I very much doubt that gcc pre-allocates 1MB for variable names. It is purely bounded by memory.

Michael Aaron Safyan
+1  A: 

I don't know what the limit is (or if there is one), but I think it is good practice that there should be one, in order to catch pathological code, for example that created by a runaway code generator. For what it's worth, the C++ Standard suggests a minimum of 1K for identifier length.

anon
@Neil, I don't think it's the compiler's responsibility to catch the runaway code generator. Allowing for an arbitrary length as permitted by hard resource constraints seems the most sensible thing to me.
Michael Aaron Safyan
+1  A: 

an additional gotcha, some linkers have a limit on the length of the mangled name. this tends to be an issue with template and nested classes more than identifier length but either could trigger a problem afaik

jk