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

См. заголовок ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

17
задан phuclv 10 August 2019 в 10:23
поделиться

3 ответа

Краткий ответ:

Нет

Длинный ответ:

Да, он должен быть достаточно маленьким, чтобы поместиться в памяти, но в остальном нет, не совсем. Если есть встроенный предел (я не верю, что он есть), он настолько велик, что вам будет очень трудно его достичь.

На самом деле, вы меня очень заинтересовали, поэтому я создал следующую программу 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 МБ для имен переменных. Это чисто ограничено памятью.

20
ответ дан 30 November 2019 в 13:04
поделиться

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

4
ответ дан 30 November 2019 в 13:04
поделиться

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

2
ответ дан 30 November 2019 в 13:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: