2010-03-01 14 views
5

क्या यह सिर्फ एक सरल प्रोग्राम संकलित करने के लिए है, उस हेडर फ़ाइल # इसमें शामिल है?प्रोग्रामर रूप से हेडर फ़ाइल के अस्तित्व की जांच करने का सबसे अच्छा तरीका?

संकलन प्रक्रिया को बेहतर ढंग से समझने के लिए मैं अपना स्वयं का "कॉन्फ़िगरेशन" लिख रहा हूं, जो कुछ शीर्षलेख और लाइब्रेरी फ़ाइलों के अस्तित्व के लिए परीक्षण करता है।

+0

आपके पास फ़ाइल का नाम और निर्देशिका शामिल करने की सूची है। क्यों न जांचें कि फ़ाइल उनमें से किसी में है या नहीं? –

+1

@ निकोलई: ऐसा करने का एक कारण यह नहीं है कि 'शीर्षक' शीर्षलेख में स्वयं अन्य फाइलें शामिल हो सकती हैं, और यह जांचना कठिन होता है कि यह फाइलें इस पर निर्भर करती हैं कि यह जांच कर मौजूद है कि वे सभी मौजूद हैं या नहीं संकलन का प्रयास करें। –

+0

@ जोनाथन: मैं इसे समझता हूं। बेशक यह पूरी तरह से परियोजना के दायरे पर निर्भर करता है, लेकिन मैं 'शामिल' निर्देशों के लिए एक पुनरावर्ती खोज करता हूं। –

उत्तर

6

हां, अपने सरल परीक्षण कार्यक्रम को संकलित करने के लिए कंपाइलर का उपयोग करें। यह देखने का सबसे अच्छा और आसान तरीका है कि संकलक हेडर ढूंढ सकता है या नहीं। यदि आप हार्ड कोड # खोज पथ शामिल करते हैं तो आपको हमेशा विभिन्न कंपाइलरों के लिए संशोधित और अनुकूलन करना होगा।

+0

सहमत; जैसा कि जोनाथन लेफ्लर ने नोट किया है, इस तरह ऑटोकॉन्फ़ यह करता है, जो कम से कम अपने पक्ष में अनुभव का एक मजबूत वोट है। –

4

जीएनयू Autoconf सूट परीक्षण संकलन चलाकर हेडर के लिए सुइट चेक करता है। फ़ाइल 'filename.h' के अस्तित्व के लिए बस परीक्षण करना काफी सरल है:

#include <filename.h> 
int main(void){return 0;} 

आप कोण ब्रैकेट के बजाय उद्धरण पसंद कर सकते हैं।

-1

निम्न प्रोग्राम का उपयोग करके, आप हेडर फ़ाइल का अस्तित्व पा सकते हैं।

#include<stdio.h> 
main() 
{ 
     FILE * file; 
     if ((file = fopen("/usr/include/stdio.h", "r"))!=NULL) 
     { 
       fclose(file); 
       printf("true"); 
     } 
     perror("err"); 

} 
+1

आलोचना? जिस फ़ाइल को आप खोज रहे हैं उसके लिए निश्चित नाम। जिस फ़ाइल को आप ढूंढ रहे हैं उसके लिए निश्चित स्थान। जिस फ़ाइल को आप ढूंढ रहे हैं उसे संकलित करते समय आप जिस फ़ाइल को ढूंढ रहे हैं उसका उपयोग कर रहे हैं। जब ठीक है और stderr पर stdout पर मुद्रण स्थिति नहीं है। सफलता और विफलता के लिए अलग-अलग निकास स्थितियों को वापस नहीं लौटाना। मुख्य - सी 99 की पुरातन सी परिभाषा का उपयोग करने के लिए 'int main()' या 'int main (शून्य)' की आवश्यकता होती है, इसलिए यह C89 या पुराना कोड होना चाहिए। दुर्भाग्यवश, केवल C99 मुख्य() से शून्य निकास स्थिति की गारंटी देता है जब आप एक स्पष्ट रिटर्न में नहीं डालते हैं, इसलिए बाहर निकलने की स्थिति अपरिभाषित है। –

+0

यह सामान्य रूप से बिल्कुल काम नहीं करेगा। –

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

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