Подтвердить что ты не робот

Существует ли ограничение длины на имена переменных g++?

Смотрите заголовок

4b9b3361

Ответ 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 для имен переменных. Оно ограничено памятью.

Ответ 2

дополнительный getcha, некоторые линкеры имеют ограничение на длину искаженного имени. это, как правило, проблема с шаблоном и вложенными классами больше, чем длина идентификатора, но может вызвать проблему afaik

Ответ 3

Я не знаю, что такое предел (или если он есть), но я считаю, что хорошая практика заключается в том, что он должен быть одним, чтобы поймать патологический код, например, созданный генератором кода убегания. Для чего это стоит, стандарт С++ предлагает минимум 1K для длины идентификатора.