c++unit-testinglanguage-design

What's a Good Way to Test that Identifiers aren't Being Truncated and Thereby Mixed Up?


In C++ class today, we discussed the maximum possible length of identifiers, and how the compiler will eventually stop treating variables as different, after a certain length. (My professor seems to have implied that really long identifiers are truncated.) I posted another question earlier, hoping to see if the limit is defined somewhere. My question here is a little different. Suppose I wanted to test either a practical or enforced limit on identifier name lengths. How would I go about doing so? Here's what I'm thinking of doing, but somehow it seems to be too simple.

Am I approaching this correctly? Will I run out of memory before I "break" the compiler or "runtime"?


Solution

  • I don't think you need to even generate any operations on the variables.

    The following code will generate a redefinition error at compilation time;

    int name;
    int name;
    

    I'd expect you'd get the same error with

    int namewithlastsignificantcharacterhere_abc;
    int namewithlastsignificantcharacterhere_123;
    

    I'd use a macro scripting language to generate successively longer names until you got one that broke. Here's a Ruby one-liner

    C:>ruby -e "(1..2048).each{|i| puts \"int #{'variable'*i}#{i};\"}" > var.txt

    When I #include var.txt in a c file, and compile with VS2008, I get the error

    "1>c:\code\quiz\var.txt(512) : fatal error C1064: compiler limit : token overflowed internal buffer"

    and 512*8 chars is the 4096 that JRL cited.