2010-12-21 6 views
0

Ich bin krank die Warnung des SehensWie die Include-Pfad für string.h in Xcode finden

„Erklärung von‚Index‘Schatten eine globale Deklaration“

Index in string.h definiert ist. Ich denke nicht, dass es für alles, was ich benutze, erforderlich ist, und ich möchte wirklich nicht alle lokalen Variablen vom Index in etwas anderes ändern.

Wer weiß, wie man herausfinden kann, wie (durch welchen Pfad) string.h enthalten ist? Ist es möglich, die Aufnahme zu verhindern?

Antwort

2

Die Funktion index ist tatsächlich in /usr/include/strings.h deklariert und wird ab POSIX-Ausgabe 7 als entfernt markiert. Sie können ihre Deklaration ausblenden, indem Sie die entsprechende POSIX-Version mit dem Compilerflag -D_POSIX_C_SOURCE=200809 festlegen. Dadurch werden auch andere in Ausgabe 7 veraltete Funktionen wie bcopy und bzero verdeckt.

+0

Ich werde es versuchen. Vielen Dank – Brian

0

Ich finde -Wshadowextrem ärgerlich und selten nützlich. Selbst wenn Sie diesen einen Fall lösen, wird es in der Zukunft sicherlich andere geben, zumal System-Header nicht-standardisierte Funktionen und Variablen definieren können, die Sie unbeabsichtigt schattieren.

Persönlich würde ich nur die Warnung deaktivieren, und manuell sicherstellen, dass keine Variablen, Funktionen, etc. benannt sind als etwas verwendet werden.

+0

C und C++ haben Namespaces, die explizit für die Implementierung reserviert sind (z. B. Namen, die mit Unterstrichen gefolgt von Großbuchstaben beginnen), und die Systembibliotheken sollten bei diesen bleiben. Wenn Sie etwas überschatten, das nicht reserviert ist und Probleme verursacht, melden Sie es als Fehler. –

+0

@David: In diesem Fall handelt es sich um eine POSIX-Funktion, die für die UNIX-Kompatibilität erforderlich ist. Die Systembibliotheksimplementierer haben nicht die Möglichkeit, einen der reservierten Namen zu verwenden. Wenn Sie die POSIX-Erweiterungen nicht möchten, können Sie dies dem Compiler mitteilen. –

Verwandte Themen