visual studio - विजुअल स्टूडियो में "stdafx.h" के लिए क्या उपयोग है?




visual-studio visual-studio-2010 (3)

"मुझे विश्वास नहीं है कि यह चाल माइक्रोसॉफ्ट कंपाइलर्स के लिए अद्वितीय है, न ही मुझे लगता है कि यह एक मूल विकास था।", यह सही है।

मुझे पहली बार 1 99 1/9 2 के आसपास बोर्लैंड सी ++ कंपाइलर के साथ प्रीकंपिल्ड हेडर का सामना करना पड़ा और मुझे विश्वास नहीं है कि यह वहां से निकलता है।

- दूसरा विकास / वृद्धिशील लिंकिंग था जो संदर्भित कोड को निष्पादन योग्य में केवल लिंक करके कोड आकार को कम करने में मदद करता था।

कोड को दोबारा लिखने या अपडेट करने से बचने के अन्य तरीकों से, अपनी परियोजना को कई अलग-अलग फाइलों में विभाजित करना है, जहां केवल बदले गए फाइलों को लिंक करने से पहले पुनः संयोजित किया जाता है, पुराने धीमे गुई के वास्तव में ऐसा करने से पहले पुराने दिनों में ।

जब मैं वीएस -2010 में एक प्रोजेक्ट शुरू करता हूं तो stdafx.h स्वचालित रूप से जेनरेट होता है। मुझे क्रॉस-प्लेटफार्म सी ++ लाइब्रेरी बनाने की ज़रूरत है, इसलिए मैं इस हेडर फ़ाइल का उपयोग नहीं कर सकता / सकती हूं।

यह किस लिए है? क्या यह ठीक है कि मैं इस हेडर फ़ाइल को हटा देता हूं?


मैं बस इस में भाग गया क्योंकि मैं खुद को एक नंगे हड्डियों के ढांचे को बनाने की कोशिश कर रहा हूं लेकिन विजुअल स्टूडियो 2017 में एक नया Win32 प्रोग्राम विकल्प बनाकर शुरू किया। "Stdafx.h" अनावश्यक है और इसे हटाया जाना चाहिए। फिर आप बेवकूफ "stdafx.h" और "stdafx.cpp" को हटा सकते हैं जो आपके समाधान एक्सप्लोरर के साथ-साथ आपकी प्रोजेक्ट की फाइलों में भी है। इसकी जगह में, आपको रखना होगा

#include <Windows.h>

बजाय।


सभी सी ++ कंपाइलर्स के साथ निपटने के लिए एक गंभीर प्रदर्शन समस्या है। संकलन सी ++ कोड एक लंबी, धीमी प्रक्रिया है।

सी ++ फाइलों के शीर्ष पर शामिल संकलन शीर्षलेख एक बहुत लंबी, धीमी प्रक्रिया है। विंडोज एपीआई और अन्य बड़ी एपीआई पुस्तकालयों का हिस्सा बनने वाले विशाल हेडर संरचनाओं को संकलित करना बहुत ही लंबी, धीमी प्रक्रिया है। प्रत्येक सीपीपी स्रोत फ़ाइल के लिए इसे खत्म करने के लिए, और अधिक, एक मौत की घंटी है।

यह विंडोज के लिए अद्वितीय नहीं है लेकिन विंडोज़ जैसे बड़े एपीआई के खिलाफ संकलन करने वाले सभी कंपाइलरों द्वारा सामना की जाने वाली पुरानी समस्या है।

माइक्रोसॉफ्ट कंपाइलर इस समस्या को प्रीकंपिल्ड हेडर नामक एक साधारण चाल के साथ सुधार सकता है। चाल बहुत चिकना है: हालांकि प्रत्येक सीपीपी फ़ाइल प्रत्येक सीपीपी फ़ाइल के शीर्ष पर शामिल हेडर फाइलों की श्रृंखला के लिए संभावित रूप से और कानूनी रूप से अलग-अलग अर्थ दे सकती है (विभिन्न मैक्रोज़ # जैसी चीजों से, इसमें शामिल होने से पहले परिभाषित किया गया है, या विभिन्न आदेशों में हेडर को शामिल करके), जो कि अक्सर मामला नहीं है। अधिकांश समय, हमारे पास दर्जनों या सैकड़ों शामिल फ़ाइलें हैं, लेकिन वे सभी आपके सीपीपी फ़ाइलों को आपके आवेदन में संकलित करने के लिए समान अर्थ रखने का इरादा रखते हैं।

कंपाइलर बड़ी सीधी बचत कर सकता है अगर उसे हर सीपीपी फाइल को संकलित करना शुरू नहीं करना पड़ता है और इसके दर्जनों में सचमुच स्क्रैच से शाब्दिक रूप से शामिल होता है।

इस चाल में एक विशेष हेडर फ़ाइल को सभी संकलन श्रृंखलाओं के शुरुआती बिंदु के रूप में नामित करने के लिए शामिल किया गया है, तथाकथित 'प्रीकंपिल्ड हेडर' फ़ाइल, जो आमतौर पर ऐतिहासिक कारणों से stdafx.h नाम की एक फ़ाइल है।

किसी भी सार्थक सामग्री से पहले, अपने stdafx.h फ़ाइल में अपने एपीआई के लिए बस अपने सभी बड़े हेडर्स को उचित क्रम में सूचीबद्ध करें, और उसके बाद अपनी प्रत्येक सीपीपी फ़ाइलों को #include "stdafx.h" साथ शीर्ष पर शुरू करें (बस टिप्पणियों से पहले अनुमति देने वाली एकमात्र चीज के बारे में)।

उन परिस्थितियों में, स्क्रैच से शुरू करने के बजाय, कंपाइलर stdafx.h में सबकुछ संकलित करने के पहले से सहेजे गए परिणामों से संकलित करना प्रारंभ करता है।

मुझे विश्वास नहीं है कि यह चाल माइक्रोसॉफ्ट कंपाइलर्स के लिए अद्वितीय है, और न ही मुझे लगता है कि यह एक मूल विकास था।

माइक्रोसॉफ्ट कंपाइलर्स के लिए, प्रीकंपिल्ड हेडर के उपयोग को नियंत्रित करने वाली सेटिंग को कंपाइलर को कमांड लाइन तर्क द्वारा नियंत्रित किया जाता है: /Yu "stdafx.h" । जैसा कि आप कल्पना कर सकते हैं, stdafx.h फ़ाइल नाम का उपयोग बस एक सम्मेलन है; यदि आप चाहें तो आप नाम बदल सकते हैं।

विजुअल स्टूडियो 2010 में, इस सेटिंग को सीपीपी प्रोजेक्ट पर राइट-क्लिक करके, 'प्रॉपर्टी' चुनकर और "कॉन्फ़िगरेशन प्रॉपर्टीज \ सी / सी ++ \ प्रीकंपिल्ड हेडर" पर नेविगेट करके जीयूआई से नियंत्रित किया जाता है। विजुअल स्टूडियो के अन्य संस्करणों के लिए, जीयूआई में स्थान अलग होगा।

ध्यान दें कि यदि आप प्रीकंपिल्ड हेडर अक्षम करते हैं (या एक उपकरण के माध्यम से अपनी परियोजना चलाते हैं जो उनका समर्थन नहीं करता है), तो यह आपके प्रोग्राम को अवैध नहीं बनाता है; इसका मतलब यह है कि आपका उपकरण हर समय स्क्रैच से सबकुछ संकलित करेगा।

यदि आप बिना किसी विंडोज निर्भरता वाले लाइब्रेरी बना रहे हैं, तो आप stdafx.h फ़ाइल से आसानी से टिप्पणी कर सकते हैं या हटा सकते हैं। प्रति फ़ाइल को हटाने की कोई आवश्यकता नहीं है, लेकिन स्पष्ट रूप से आप उपरोक्त प्रीकंपाइल शीर्षलेख सेटिंग को अक्षम करके भी ऐसा कर सकते हैं।








stdafx.h