6

Ich möchte splint auf einigen meiner Quellen innerhalb einer debian stabilen Umgebung laufen lassen.
Ich muss die Präprozessordirektive geben -DUINT16_T='unsigned short' und wie ich das sehr oft brauche. Ich möchte es in meine .splintrc Datei einfügen.
Wenn es von der Befehlszeile wie splint -DUINT16_T='unsigned short' mysource.c ausgeführt wird, funktioniert es gut. Wenn das Verschieben Sie diese Zeile in meine .splintrc DateiWhiteSpaces in .splintrc Präprozessordirektive -D

-DUINT16_T='unsigned short' 
-I/usr/local/include/ 

die splint Anruf Ergebnisse in

Cannot list files in .splintrc files: 
           short' (probable missing + or -) 
    A flag is not recognized or used in an incorrect way (Use -badflag to inhibit 
    warning) 

Hat eine Lösung anyone? (Kein Alias, bitte).

Für furher Diskussion ich eine MNWE (minimal nicht funktionierendes Beispiel) hello.c bieten werde, die helfen könnten:

#include <stdio.h> 

int main (void) 
{ 
    UINT16_T returnvalue=0; 
    printf ("Hello, world!\n"); 
    return returnvalue; 
} 

Der Befehl gcc -DUINT16_T='unsigned short' hello.c läuft gut - und macht auch splint -DUINT16_T='unsigned short' hello.c die natürlich

Return value type unsigned short int does not match declared type 
       int: returnvalue 
behauptet

Aber noch einmal, wie kann ich diese DEFINE in meine .splintrc aufnehmen?

+1

Ich brauche das gleiche, mit Ausnahme der Flagge: „-Dbit = unsigned char“ – Jodes

Antwort

1

--Neue answer--

Was Sie fordern ist einfach nicht in Schiene umgesetzt.

Wenn Sie auf der Schiene aussehen 3.1.2 rcfiles_loadFile Funktion in rcfiles.c Linie 124

124   while ((c = *s) != '\0') 
125    { /* remember to handle spaces and quotes in -D and -U ... */ 
126    if (escaped) 
127     { 
128     escaped = FALSE; 
129     } 
130    else if (quoted) 
131     { 
132     if (c == '\\') 
133      { 
134      escaped = TRUE; 
135      } 
136     else if (c == '\"') 
137      { 
138      quoted = FALSE; 
139      } 
140     else 
141      { 
142      ; 
143      } 
144     } 
145    else if (c == '\"') 
146     { 
147     quoted = TRUE; 
148     } 
149    else 
150     { 
151     if (c == ' ' || c == '\t' || c == '\n') 
152     { 
153      /*@[email protected]*/ break; 
154     } 
155    } 
156 
157    s++; 
158    incColumn(); 
159    } 

Sie sehen, dass der Kommentar in Zeile 125 ist ein ERLEDIGEN für das, was ihr bittet.

änderte ich die Linie 151 bis

151     if (c == '\t' || c == '\n') 

Compile, laufen und dann minimal Arbeitsbeispiel nicht (ohne Anführungszeichen in .splintrc) ohne Probleme den Test passiert.

Diese Modifikation ist jedoch etwas rauh, da einige Schieneneinheitstests dann fehlschlagen.

+0

Hallo Ortomala, so traurig es nicht für mich funktioniert. –

+0

Es sollte funktionieren, versuchen Sie es erneut. –

+0

Ich habe versucht - und Ihre Datei läuft gut - aber versuchen Sie #include Int Haupt (void) { UINT16_T returnvalue = 0; printf ("Hallo, Welt! \ N"); Rückgabewert; } dann sehen Sie nur in Läufen, weil die Definition nicht verwendet wird. So traurig. Weitere Tipps/Ideen? –

0

Verwenden Sie doppelte Anführungszeichen, keine einfachen Anführungszeichen.

-DUINT16_T="unsigned short" 
+0

Im Moment kann ich es nicht versuchen, aber einen Blick auf den Kommentar werfen http://stackoverflow.com/questions/15220228/whitespaces-in-spllintrc-preprocessor-directive-d/29901100?iemail=1&noredirect=1#comment33322234_15220228 I denke auch doppelte Anführungszeichen werden nicht funktionieren. –

+1

Zitate in diesem Kommentar gelten nicht für '.splintrc'. Wie Sie aus dem Quellcode sehen können, wird der String mit ''' '' char 'quoted'. – LennyB