2015-02-26 20 views
5

Geçenlerde bir araya yapıştırılan alır bir "string3" sonra,dize değişmez birleştirme için gcc bayrağı?

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

yani birisi gibi bir şey sonucuydu bir unuttum hata ve "String3" ve "String4" sabit. Şimdi, bu tamamen yasal kod olsa da, benzer hatalar için kod tabanını tarayabilen bir gcc uyarı bayrağı veya başka bir araç var mı?

+0

Çok bu kasıtlı çeşitli yerlerde kullanıldığı için böyle bir seçenek olduğunu hiç zannetmiyorum ve olur çok yanlış pozitif sonuç verir. – stefan

+0

Bu, eğer (a = 5) DoSmth(); 'pratik olarak kaldırılamaz. – ForceBru

+0

Dize birleştirme, önişlemci tarafından yapılır. –

cevap

1

Temel 'aracı' Kullanmak olabilecek bir önişlemci kesmek, ama çok çirkin bir çözüm:

#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

satırları içinde yeni satırlar ve boşluklar için grep'leyin Haklısınız - çirkin;) [hyde (yukarıda)] (http://stackoverflow.com/questions/ 28744208/gcc-flag-to-detect-string-literal-concatenation): "Uygun birim testi, bu hatayı, diziyi doğrudan test ederek ya da diziyi kullanan bir şeyi sınayarak dolaylı olarak algılamalıdır." – FoggyDay

İlgili konular