2009-08-24 10 views
5

में प्रीकंपील्ड हेडर के बारे में प्रश्न अगर मैं एक हेडर (एएच) stdafx.h में डालता हूं और उस शीर्षलेख में एक और शीर्षलेख (बीएच) शामिल है जिसका उल्लेख stdafx.h में नहीं किया गया है, तो प्रत्येक बार जब कोई आह या क्या यह आह के हिस्से के रूप में संकलित है? अगर इसे एएच में संकलित किया गया है, तो क्या होता है जब किसी में बीएच शामिल होता है? क्या यह precompiled होगा या नहीं?विजुअल सी ++

इस प्रश्न पूछने के लिए मेरी प्रेरणा यह है कि मैं जिस सॉफ्टवेयर पर काम करता हूं उसके लिए stdafx.h फ़ाइलों की सामग्री को अनुकूलित करने का प्रयास कर रहा हूं। दोनों पुनर्निर्माण और वृद्धिशील निर्माण समय हमारे लिए महत्वपूर्ण हैं। मैं सोच रहा था कि क्या मैं # शामिल निर्देशों के लिए सभी .cpp फ़ाइलों के माध्यम से खोज सकता हूं और प्रत्येक फ़ाइल को शामिल करने की संख्या की गणना करता हूं। फ़ाइलें जो अक्सर शामिल थीं stdafx.h फ़ाइल के लिए अच्छे उम्मीदवार हो सकती हैं। बेशक, यह रणनीति पूरी तरह से फर्जी है अगर मुझे न केवल फाइलों को शामिल करना है, बल्कि फाइलों को शामिल करने वाली फाइलें भी शामिल हैं।

मुझे शक है यह मायने रखता है, लेकिन हम दृश्य स्टूडियो का उपयोग कर रहे 2005

+0

कृपया इसके लिए वोट दें: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4931119-allow-precompiled-headers-to-be-shared-between-pro –

उत्तर

4

a.h और b.h precompiled शीर्ष लेख का हिस्सा होगा, और उन्हें बाद में शामिल करने के लिए कोई जरूरत नहीं है। आपको केवल stdafx.h को शामिल करना है जहां a.h या b.h आवश्यक हैं। यदि आप stdafx.h के बाद स्पष्ट रूप से आह या बी शामिल करेंगे (stdafx.h से पहले सभी कोड को अनदेखा किया जाता है), तो इसे दूसरी बार संकलित नहीं किया जाएगा (सिर्फ इसलिए कि वे आमतौर पर #pragma once निर्देश या परिभाषित करते हैं), लेकिन संकलक यदि आप इसके बारे में पूछ रहे हैं, तो उस फ़ाइल को हार्ड डिस्क पर खुल जाएगा,

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

+3

आप क्या कहते हैं stdafx.h के बाद आह या बीएच सहित तकनीकी रूप से सत्य है - संकलक फिर से हेडर को देखेगा - लेकिन अधिकांश शीर्षलेख #pragma का उपयोग करते हैं या इसे रोकने से रोकने के लिए गार्ड शामिल करते हैं। असल में, मैं a.h और b.h को कहीं भी अनुशंसा करता हूं, भले ही a.h stdafx.h में है, अन्यथा आप संकलन त्रुटियों की अंतहीन सूची में बिना चलने के बाद stdafx.h की सामग्री को tweak करने में सक्षम नहीं होंगे। –

+0

हां, उन्हें संकलित नहीं किया जाएगा, लेकिन वे तकनीकी रूप से कंपाइलर द्वारा खोले जाएंगे। –

+1

मैं मानता हूं कि निक का विचार उपयोगी है, लेकिन मुझे डर है कि प्रदर्शन प्रदर्शन होगा क्योंकि हमें एक बार एक प्रोप्रोमा खोजने के लिए अतिरिक्त डिस्क IO करने की आवश्यकता है –