Ответ 1
Краткий ответ:
Нет
Длинный ответ:
Да, он должен быть достаточно маленьким, чтобы он поместился в памяти, но в противном случае нет, на самом деле. Если есть встроенный предел (я не верю, что есть), он настолько огромен, что вам будет очень трудно его достичь.
На самом деле, мне очень интересно, поэтому я создал следующую программу 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]));
Это генерирует код С++ с использованием имени переменной длины. Используя следующее:
./gencpp.py 1048576 > main.cpp g++ main.cpp -o main
Приведенное выше не дает мне никаких проблем (имя переменной составляет примерно 1 МБ в длину). Я попытался использовать гигабайт, но я не настолько умен в построении строк, поэтому решил отказаться, когда gencpp.py занял слишком много времени.
В любом случае, я очень сомневаюсь, что gcc предварительно выделяет 1MB для имен переменных. Оно ограничено памятью.