6

मैं डेबियन स्थिर वातावरण के भीतर अपने कुछ स्रोतों पर splint चलाने के लिए चाहता हूं।
मुझे प्रीप्रोसेसर निर्देश -DUINT16_T='unsigned short' देने की आवश्यकता है और मुझे इसकी आवश्यकता है। मैं इसे अपने .splintrc फ़ाइल के अंदर रखना चाहता हूं।
splint -DUINT16_T='unsigned short' mysource.c जैसे कमांडलाइन से चलते समय यह अच्छी तरह से काम कर रहा है। यदिव्हाइटस्पेस .splintrc प्रीप्रोसेसर निर्देश-डी

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) 

में मेरी .splintrc फ़ाइल

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

splint कॉल परिणामों में इस लाइन चलती किसी को भी एक समाधान है? (कोई उपनाम, कृपया)।

furher चर्चा के लिए मैं एक mnwe (कम से कम काम नहीं कर उदाहरण) hello.c है, जो मदद कर सकता है की पेशकश करेंगे:

#include <stdio.h> 

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

आदेश gcc -DUINT16_T='unsigned short' hello.c रन ठीक - और भी splint -DUINT16_T='unsigned short' hello.c जो निश्चित रूप से दावा है

Return value type unsigned short int does not match declared type 
       int: returnvalue 
करता है

लेकिन फिर, मैं इस डेफिन को अपने .splintrc में कैसे शामिल कर सकता हूं?

+1

मैं एक ही बात की जरूरत है, ध्वज के अलावा: "-Dbit = अहस्ताक्षरित चार" – Jodes

उत्तर

1

--new

क्या आप पूछ रहे हैं सिर्फ पट्टी में लागू नहीं किया गया answer--।

आप rcfiles.c लाइन में पट्टी 3.1.2 rcfiles_loadFile समारोह को देखें, तो 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    } 

आप देखते हैं कि लाइन 125 में टिप्पणी है कि तुम क्या कह रहे हैं के लिए एक कार्यसूची है।

मैं अपने कम से कम काम नहीं कर उदाहरण (.splintrc में उद्धरण के बिना) चलाने

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

संकलित करने के लिए लाइन 151 बदल गया है, और उसके बाद एक समस्या के बिना परीक्षण गुजर रहा है।

हालांकि यह संशोधन थोड़ा मोटा है क्योंकि कुछ स्प्लिंट यूनिट परीक्षण तब विफल हो रहे हैं।

+0

हाय Ortomala, इतने दुखी यह मेरे लिए काम नहीं कर रहा। –

+0

इसे काम करना चाहिए, पुनः प्रयास करें। –

+0

मैंने कोशिश की - और आपकी फ़ाइल ठीक चलती है - लेकिन # int मुख्य (शून्य) { UINT16_T वापसीvalue = 0 शामिल करें; printf ("हैलो, दुनिया! \ N"); वापसी वापसी; } तो आप केवल रनों में देखेंगे क्योंकि परिभाषा का उपयोग नहीं किया जाता है। बहुत दुख की बात। Furhter संकेत/विचार? –

0

एकल कोट्स नहीं डबल कोट्स का उपयोग करें।

-DUINT16_T="unsigned short" 
+0

फिलहाल मैं कोशिश नहीं कर सकता, लेकिन टिप्पणी पर नजर डालें http://stackoverflow.com/questions/15220228/whitespaces-in-splintrc-preprocessor-directive-d/29901100?iemail=1&noredirect=1#comment33322234_15220228 I लगता है कि डबल कोट्स काम नहीं करेंगे। –

+1

उस टिप्पणी में उद्धरण '.splintrc' पर लागू नहीं होते हैं। जैसा कि आप स्रोत कोड स्ट्रिंग से देख सकते हैं ''' '' char' के साथ 'उद्धृत' हो जाता है। – LennyB

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