2015-02-26 22 views
5

मैं हाल ही में एक बग की तरहजीसीसी ध्वज?

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

अर्थात किसी ने कुछ का परिणाम था एक भूल गया "string3" के बाद, और "string3" और "string4" निर्धारित एक साथ चिपकाया जाता है। अब, जबकि यह पूरी तरह से कानूनी कोड है, क्या कोई gcc चेतावनी ध्वज है, या अन्य उपकरण जो समान त्रुटियों के लिए कोड बेस स्कैन कर सकता है?

+0

मैं अत्यधिक, शक वहाँ इस तरह के एक विकल्प है कि क्योंकि यह जानबूझकर विभिन्न स्थानों में प्रयोग किया जाता है और होगा झूठी सकारात्मक चीजों का उत्पादन करें। – stefan

+0

यह 'if (a = 5) DoSmth(); 'व्यावहारिक रूप से अचूक है। – ForceBru

+0

स्ट्रिंग कॉन्सटेनेशन प्रीप्रोसेसर द्वारा किया जाता है। –

उत्तर

1

एक बुनियादी 'उपकरण' आप इस्तेमाल कर सकते हैं एक पूर्वप्रक्रमक हैक है, लेकिन यह एक बहुत ही बदसूरत समाधान है:

#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

आप सही हैं - बदसूरत;) मैं [hyde (ऊपर)] से सहमत हूं (http://stackoverflow.com/questions/ 28744208/gcc-flag-to-detect-string-literal-concatenation): "उपयुक्त इकाई परीक्षण को इस गलती का पता लगाना चाहिए, या तो सीधे सरणी का परीक्षण करना चाहिए, या अप्रत्यक्ष रूप से सरणी का उपयोग करने वाले किसी परीक्षण का परीक्षण करके।" – FoggyDay

संबंधित मुद्दे