2009-03-21 29 views
6

क्या आप जानते हैं कि मैं स्प्लिंट को कैसे अनदेखा कर सकता हूं जहां मैं अपने चर घोषित करता हूं?मैं स्प्लिंट को अनदेखा कैसे कर सकता हूं जहां मैं अपने चर घोषित करता हूं?

मैं जानता हूँ कि पुराने स्कूल ग बताता है कि आप हर कार्य, में शुरुआत सही पर चर घोषित करने के लिए लेकिन जब से मैं एक बुरा व्यक्ति हूँ मैं जहाँ मैं उन्हें इस्तेमाल के करीब बातें घोषित करने के लिए पसंद करते हैं। एक अच्छा उदाहरण है int int रखना; ठीक से पहले (i = 0; ...)।

के एक बहुत ही सरल उदाहरण

#include <stdio.h> 
int main() 
{ 
    printf("Hello splint test\n"); 

    int i; 
    for(i=5;i>0;i--) 
    { 
     printf("%2d...\n",i); 
    } 

    return 0; 
} 

यहाँ पट्टी और सबसे पुराने ग compilers मैं पूर्णांक स्थानांतरित करना चाहते हैं लेते हैं; एक लाइन, या {} घोषणा के लिए और लूप के लिए {} डालने के लिए।

और अब सवाल का, मैं कैसे इस चेक को बंद कर देते हैं? लेकिन अन्य चेक जो अच्छा है?

धन्यवाद जोहान


नोट 1: मैं पहले से ही रक्षा, और दूसरी के रूप में valgrind बंद एक पहली पंक्ति के रूप जीसीसी चेतावनी (देखें नीचे) का उपयोग करें। लेकिन मैं चीजें हैं जो अपनी मूर्खता ;-) को नियंत्रित कर सकता है की मेरी सूची में पट्टी को जोड़ने के बारे में सोच रहा हूँ लेकिन इस चेक सिर्फ कष्टप्रद है,

जीसीसी चेतावनी मैं का उपयोग करें: -Wall डब्ल्यू -Wextra -Wconversion - Wshadow-Wcast-qual -Wwrite-strings -Werror

नोट 2: मुझे उस संभावित व्यवहार से होने वाली संभावित पोर्टेबिलिटी समस्याओं के बारे में पता है। लेकिन मुझे लगता है कि यह पठनीयता को बढ़ाता है, उर्फ ​​को इस प्रकार की घोषणाओं को खोजने के लिए ऊपर और नीचे कूदने की आवश्यकता नहीं है और यह अधिक मूल्यवान है (और यह हम किसी अन्य धागे में चर्चा कर सकते हैं)।


अद्यतन: एक छोटी सी में अधिक जानकारी है, मैं एक फ़ाइल बुलाया main.c. में उपरोक्त कोड डाल इस्तेमाल किया मंच Ubuntu 8.04 और संपादक, रूप जाँचने और जब मैं इसे चलाने के लिए इस पट्टी से उत्पादन होता है:

splint +gnuextensions main.c 
Splint 3.1.1 --- 03 Nov 2006 

Command Line: Setting +gnuextensions redundant with current value 
main.c:8:8: Parse Error. (For help on parse errors, see splint -help 
       parseerrors.) 

और यह 2 अधिक सवाल है कि मैं के बारे में पहले नहीं सोचा था को खोलता है।

  1. "वर्तमान मूल्य के साथ अनावश्यक", वर्तमान मूल्य क्या है?

  2. यह एक पार्स त्रुटि क्यों है और चेतावनी नहीं है?


अद्यतन:: पैच पट्टी के लिए एक posibility इस समस्या को समर्थन करने के लिए नहीं है, मैं अभी तक इस प्रयास नहीं किया है लेकिन लेकिन मुझे लगता है कि समाधान है कि।

+1

जबकि आप इसमें हैं, आपको विवरण के लिए int घोषित करना चाहिए। – starblue

+0

आप एक कष्टप्रद चेतावनी, या एक पार्सर त्रुटि हो रही है? –

+0

और यह "int" और "i" के बीच की जगह है जो स्प्लिंट तोड़ती है? – Johan

उत्तर

7

यहाँ एक पैच है: http://www.cs.virginia.edu/pipermail/splint-discuss/attachments/20080718/52cc25f6/attachment.obj

फिर आप यह सिर्फ पुनर्निर्माण होना चाहिए कि खिलाने के लिए पैच -P2 के माध्यम से अगर आप पट्टी/src निर्देशिका में कर रहे हैं सक्षम होना चाहिए, और।

इस ईमेल से है कि: (। उस पर रिक्ति के बारे में क्षमा करें) http://www.cs.virginia.edu/pipermail/splint-discuss/2008-July/001190.html

आपको लगता है कि अंत में मिल जाएगा अगर आप धागा starblue से जुड़ा हुआ पालन करें, लेकिन मैंने सोचा कि मैं कूद चाहते हैं आपके लिए अंत तक

दुर्भाग्य से, स्प्लिंट अभी एक रखरखाव के बिना प्रतीत होता है। अगर मैं इतना व्यस्त नहीं था तो मैं कदम उठाने और कुछ और करने पर विचार करता।

जेक

+0

मैंने स्प्लिंट 3.1.2 स्रोतों को उस पैच को लागू करने का प्रयास किया। जब मैंने इसे बनाने की कोशिश की तो मुझे वाक्यविन्यास त्रुटियां मिलीं। जब मैंने पैच के बिना स्प्लिंट 3.1.2 * बनाने की कोशिश की तो मुझे सिंटैक्स त्रुटियां भी मिलीं। –

2

आमतौर पर, पट्टी के साथ, अगर कुछ दबा दिया जा सकता है यह कहेंगे

आप पट्टी + gnuextensions foo.c, जो (सबसे) चालू हो जाती है की कोशिश कर सकते जीएनयू/जीसीसी "+ thisflag या -thisflag के साथ इस को दबाने" एक्सटेंशन जो स्प्लिंट अन्यथा समस्या उठाएंगे।

मैं लगभग के रूप में अक्सर पट्टी का उपयोग के रूप में मैं valgrind का उपयोग करें।

संपादित करें:

के रूप में अन्य लोगों ने कहा, पार्सर (नहीं विश्लेषक) में अपने चल रहा है, तो झंडे वास्तव में इस मामले में मदद करने के लिए नहीं जा रहे हैं।

+0

- "कमांड लाइन: वर्तमान मूल्य के साथ अनावश्यक + gnuextensions सेट करना", कुछ अवरोधन है। – Johan

3

मैं पट्टी से परिचित नहीं हूँ, लेकिन their FAQ से:

पट्टी अपने संकलक से स्वतंत्र है। यह आईएसओ C99 विवरणों के आधार पर मानक सी कोड की जाँच करता है, । स्प्लिंट सबसे अधिक, का समर्थन करता है, लेकिन सभी नहीं, C99 एक्सटेंशन एएनएसआई सी स्प्लिंट जीसीसी कंपाइलर एक्सटेंशन (यदि + gnuextensions का उपयोग किया जाता है) का समर्थन करता है।

आपकी घोषणा की स्थिति सी 99 के तहत पूरी तरह से अनुपालनशील है, तो शायद आप इसे स्प्लिंट में एक बग मान सकते हैं। या यह "एक्सटेंशन" में से एक है जिसे अभी तक स्प्लिंट द्वारा समर्थित नहीं है। किसी भी तरह से वे आपकी प्रतिक्रिया में रुचि ले सकते हैं। परिवर्तनीय घोषणाओं के बारे में शिकायत करने के लिए सी 99-अनुरूप लिंट टूल का कोई कारण नहीं होना चाहिए।

5

पट्टी मेलिंग सूची पर This thread मुद्दा चर्चा करता है।

ऐसा लगता है कि पार्सर ज्यादातर C89/C90, केवल पुस्तकालय C99 हो रहा है है।

के बाद से इस मुद्दे को पार्सर के साथ है आप इसे झंडे की स्थापना करके चले जाओ नहीं कर सकता।

+1

मुझे लगता है कि आप सही हैं, हालांकि मैं पता लगाने के लिए उस सूची में एक मेल भेजता हूं। http://www.cs.virginia.edu/pipermail/splint-discuss/2009- मार्च/001288.html चलो देखते हैं कि क्या होता है। – Johan

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