Frage

Siehe Titel

War es hilfreich?

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ösen

Ich 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top