2015-02-26 13 views
5

Recentemente ho corretto un bug che è stato il risultato di qualcosa comeflag gcc per rilevare la concatenazione letterale stringa?

const char *arr[] = { 
"string1", //some comment 
"string2", 
"string3" //another comment 
"string4", 
"string5" 
}; 

cioè qualcuno ha dimenticato una, dopo "stringa3", e "stringa3" e "string4" viene incollato insieme. Ora, mentre questo è un codice perfettamente legale, c'è un flag di avviso di gcc, o un altro strumento che potrebbe scansionare la base di codice per errori simili?

+0

dubito fortemente che ci sia una tale opzione, in quanto questo è usato in vari luoghi intenzionalmente e sarebbe produrre molti di falsi positivi. – stefan

+0

Questo è come 'if (a = 5) DoSmth();' praticamente incatenabile. – ForceBru

+0

La concatenazione delle stringhe viene eseguita dal preprocessore. –

risposta

1

A 'strumento' di base è possibile utilizzare è un hack preprocessore, ma è una soluzione molto brutto:

#include <stdlib.h> 
#include <stdio.h> 

int start = __LINE__; 
const char *arr[] = { 
"string1", //some comment 
"string2", 
"string3" //another comment 
"string4", 
"string5" 
};int end = __LINE__; 

int main(int argc, char **argv){ 
    printf("arr length: %zu\n", sizeof(arr)/sizeof(arr[0])); 
    printf("_assumed_ arr length: %d\n", (end - start - 2)); 
} 
+0

Hai ragione - brutto;) Sono d'accordo con [hyde (sopra)] (http://stackoverflow.com/questions/ 28744208/gcc-flag-to-detect-string-literal-concatenation): "Il test dell'unità appropriato dovrebbe rilevare questo errore, sia testando direttamente l'array, sia indirettamente testando qualcosa che usi l'array." – FoggyDay

Problemi correlati