Gibt es eine Längenbegrenzung auf g ++ Variablennamen?
-
30-09-2019 - |
Frage
Siehe Titel
Lösung
Kurze Antwort:
Nein
Lange Antwort:
Ja, hat es klein genug sein, dass es in dem Speicher passen, aber sonst nein, nicht wirklich. Wenn es eine eingebaute Grenze (Ich glaube nicht, es gibt) es ist so riesig, Sie wirklich hart bedrängt würden, um es zu erreichen.
Eigentlich hast du mich wirklich neugierig, so dass ich das folgende Python-Programm erstellt Code zu generieren:
#! /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]));
Dies erzeugt C ++ Code, der die gewünschte Länge variable Namen. Unter Verwendung folgt:
./gencpp.py 1048576 > main.cpp
g++ main.cpp -o main
Das gibt mir oben keine Probleme (der Variablennamen in etwa 1 MB in der Länge). Ich habe versucht, für ein Gigabyte, aber ich bin nicht so klug mit der String Konstruktion zu sein, und so entschied ich mich um den Vorgang abzubrechen, wenn gencpp.py zu lange gedauert habe.
Wie auch immer, ich bezweifle sehr, dass gcc vorab zuordnet 1MB für Variablennamen. Es ist lediglich begrenzt durch Speicher.
Andere Tipps
eine zusätzliche Gotcha haben einige Linker, die eine Begrenzung der Länge der verstümmelten Namen. ist dies jedoch häufig ein Problem mit Schablone und verschachtelten Klassen mehr als Bezeichnerlänge sein, aber könnte entweder ein Problem afaik
auslösenIch weiß nicht, was die Grenze ist (oder wenn es einen gibt), aber ich denke, es ist ein gute Praxis ist, dass es sein sollte, um beispielsweise pathologischen Code, zu fangen, die von einem außer Kontrolle geratenen Code-Generator erstellt. Für was es wert ist, schlägt der C ++ Standard, um ein Minimum von 1K-Kennung für die Länge.