6

Voglio eseguire splint su alcune delle mie origini in un ambiente debian stabile.
Ho bisogno di dare la direttiva preprocessore -DUINT16_T='unsigned short' e come ho bisogno che molto spesso. Mi piacerebbe inserirlo nel mio file .splintrc.
Quando si esegue da riga di comando come splint -DUINT16_T='unsigned short' mysource.c, funziona correttamente. Se lo spostamento di questa linea nella mia .splintrc file diWhiteSpace nella direttiva preprocessore .splintrc -D

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

i risultati splint chiamata 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) 

Qualcuno ha una soluzione? (No alias, per favore).

Per la discussione Fuhrer offro un ECNO (minimo esempio non funzionante) hello.c, che potrebbe aiutare:

#include <stdio.h> 

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

Il comando gcc -DUINT16_T='unsigned short' hello.c corre bene - e lo fa anche splint -DUINT16_T='unsigned short' hello.c che ovviamente pretende

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

Ma ancora, come posso includere questo DEFINI nel mio .splintrc?

+1

Ho bisogno la stessa cosa, tranne che per la bandiera: "-Dbit = unsigned char" – Jodes

risposta

1

--Nuovo answer--

quello che stai chiedendo non è solo implementato in stecca.

Se si guarda la stecca 3.1.2 rcfiles_loadFile funzione in linea rcfiles.c 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    } 

si vede che il commento in linea 125 è un TODO per quello che stai chiedendo.

ho cambiato la linea 151 per

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

compilare, eseguire e quindi il tuo esempio non funziona minimo (senza virgolette in .splintrc) viene superato il test senza un problema.

Tuttavia questa modifica è un po 'approssimativa poiché alcuni test di unità di splint stanno quindi fallendo.

+0

Hi Ortomala, così triste che non funziona per me. –

+0

Dovrebbe funzionare, riprova. –

+0

Ho provato - e il file funziona bene - ma provate #include int main (void) { uint16_t returnValue = 0; printf ("Ciao, mondo! \ N"); return returnvalue; } quindi vedrai solo in esecuzione perché la definizione non viene utilizzata. Così triste. Suggerimenti/idee? –

0

Utilizzare le virgolette doppie non le virgolette singole.

-DUINT16_T="unsigned short" 
+0

Al momento non posso provare, ma dando un'occhiata al commento http://stackoverflow.com/questions/15220228/whitespaces-in-splintrc-preprocessor-directive-d/29901100?iemail=1&noredirect=1#comment33322234_15220228 I pensa anche che le virgolette non funzionino. –

+1

Le citazioni in quel commento non si applicano a '.splintrc'. Come puoi vedere dalla stringa del codice sorgente, viene 'quoted' con' '\ "'' char. – LennyB