См. заголовок
Нет
Да, он должен быть достаточно маленьким, чтобы поместиться в памяти, но в остальном нет, не совсем. Если есть встроенный предел (я не верю, что он есть), он настолько велик, что вам будет очень трудно его достичь.
На самом деле, вы меня очень заинтересовали, поэтому я создал следующую программу 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
Вышеупомянутое не вызывает у меня проблем (имя переменной имеет длину примерно 1 МБ). Я попытался использовать гигабайт, но я не очень умно подходил к построению строки, поэтому решил прервать выполнение, когда gencpp.py заняло слишком много времени.
В любом случае, я очень сомневаюсь, что gcc заранее выделяет 1 МБ для имен переменных. Это чисто ограничено памятью.
дополнительная ошибка, некоторые линкеры имеют ограничение на длину искаженного имени . это, как правило, проблема с шаблоном и вложенными классами, длина которых превышает длину идентификатора, но любой из них может вызвать проблему afaik
Я не знаю, каков предел (или есть ли он), но я думаю, что это хорошая практика, чтобы он был, чтобы выявлять патологический код, например, созданный неконтролируемым генератором кода. Как бы то ни было, стандарт C ++ предлагает минимум 1 КБ для длины идентификатора.