String-Array-Konvertierung

8

Ich habe den folgenden Code:

%Vor%

Es kompiliert OK mit "gcc -Wall -ansi -pedantic". Aber mit einer anderen Toolchain (Rowley) klagt es über

%Vor%

in der Zeile wo char ** t ist. Ist das wirklich illegaler Code oder ist es in Ordnung?

Danke für die Antwort. Ich weiß jetzt, wo mein Problem war. Es wirft jedoch eine neue Frage auf:

String-Array-Initialisierung

    
lang2 20.10.2011, 10:04
quelle

4 Antworten

4

Scheint mir vollkommen legal; char *[3] verfällt in char ** , daher sollte die Zuweisung gültig sein.

Weder GCC 4.4.5 noch CLang 1.1 beschweren sich.

    
Fred Foo 20.10.2011, 10:12
quelle
2

Obwohl array1 in der Praxis zu einem Zeiger vom Typ char ** zerfallen sollte, ist sein realer Typ tatsächlich char *[3] , daher die Warnung.

Um die Warnung zu unterdrücken, könnten Sie versuchen, sie explizit zu formulieren:

%Vor%     
Blagovest Buyukliev 20.10.2011 10:11
quelle
1

array1 ist (char *)[3] , was sich semantisch von char ** unterscheidet, obwohl es in der Zuweisung zu einem char **

deklariert werden sollte     
Nico 20.10.2011 10:13
quelle
-1

Zeiger und Arrays und nur in statischem Umfang kompatibel. Im globalen Gültigkeitsbereich sind ein Zeiger und ein Array nicht identisch, ein Mischen der beiden führt zu undefiniertem Verhalten. Also meiner Meinung nach ist die Warnung korrekt.

Versuchen Sie es mit:

%Vor%

in einem Modul und:

%Vor%

in einem anderen, kompilieren und verknüpfen. (Ich habe es nicht versucht ...) Ich würde erwarten, dass Dinge schiefgehen ...

    
Henry Rusted 20.10.2011 10:54
quelle

Tags und Links