2010-12-10 13 views
5

में एक ही कोड के लिए ऑब्जेक्ट फ़ाइल आकार बदलता है मैंने दृश्य स्टूडियो 2008 के सी और सी ++ निर्माण वातावरण दोनों में कोड की समान पंक्तियां लिखी हैं लेकिन सी कोड की ऑब्जेक्ट फ़ाइल का आकार 5.5kb है और C++ कोड फ़ाइल का आकार 6.17 है केबी। यह अंतर क्यों है?क्यों सी और सी ++

#include <stdio.h> 

struct S 
{ 
    char c; 
}; 
void func() 
{ 
    int i; 
    int j; 
    printf("%d", i); 
} 

int main() 
{ 
    struct S s; 
    return 0; 
} 
+2

ठीक है, अलग-अलग भाषाएं अलग-अलग होती हैं। यही "अलग" मतलब है। ;) – jalf

+2

यह बड़ा है, क्योंकि बड़ा बेहतर है। –

उत्तर

5

यह प्रत्येक मामले में अलग सी क्रम पुस्तकालयों लिंक:

के बाद दोनों परिवेशों में कोड है। विस्तृत स्पष्टीकरण के लिए Check here। उदाहरण के लिए, libcmt.lib बनाम libcpmt.lib

+0

ऐसा क्यों? चूंकि कोड समान है, वही भागों को लिंक किया जाना चाहिए, जहां तक ​​मुझे लगता है। – Vikas

+8

क्योंकि सी और सी ++ विभिन्न प्रोग्रामिंग भाषाएं हैं। –

+3

@ विकस: सी ++ में आपको अपवाद या सी ++ विशिष्ट आवंटन ("नया", "हटाएं") को संभालने के लिए कोड होना चाहिए। आप अपने सी ++ प्रोजेक्ट में अपवाद हैंडलिंग को अक्षम करने का प्रयास कर सकते हैं और इसे फ़ाइल आकार को कम करना चाहिए। – patriiice

-4

को शामिल फ़ाइल stdio.h एक ज्यादा और अधिक जटिल के लिए सी ++ के रूप में यह शायद iostreams कार्यों की चोटी पर stdio कार्यों निकला संकलन है। सीधी सी संकलन के लिए, iostream का उपयोग नहीं किया जाता है। तो वस्तु फ़ाइल सी

में

संपादित

छोटा होता है मुझे नहीं लगता कि downvoters के कई सवाल को समझते हैं। ओपी पूछ रहा है कि ऑब्जेक्ट फ़ाइल आकार में क्यों बढ़ी है। निष्पादन योग्य नहीं है। पुस्तकालय नहीं

वी.एस. 2008 के लिए stdio.h को देखने के बाद, मुझे लगता है कि C++ और C के लिए संकलन मतभेद के रूप में वे gcc है, जो अपने मूल जवाब का आधार था के लिए कर रहे हैं लगभग के रूप में नाटकीय नहीं कर रहे हैं। फिर भी, नामस्थान और उलझन वाले बाहरी प्रतीक ऑब्जेक्ट फ़ाइल को बड़ा बनाते हैं।

+2

मुझे आशा है कि यह आपके लिए साक्षात्कार प्रश्न नहीं था। –

5

सिर्फ इसलिए कि आपके कोड का सी और सी ++ में अलग अर्थ है।

  • C++ में आप कार्यों कि कोई तर्क प्राप्त घोषित, सी में आप कार्यों तर्कों की एक अज्ञात संख्या है कि घोषणा करते हैं। (कभीmain के हस्ताक्षर बदल)
  • फ़ंक्शन नाम सी ++ में घायल कर रहे हैं
  • कार्यों सी ++ में अपवाद फेंक सकता है
  • निष्पादनयोग्य प्रारंभ की कमी की वजह डिफ़ॉल्ट
  • द्वारा विभिन्न पुस्तकालयों के खिलाफ जुड़े हुए हैं i पर printf पर कॉल अपरिभाषित व्यवहार है। दोनों भाषाओं आपको शूट करने के लिए विभिन्न रणनीतियां पर निर्णय ले सकती हैं।
+0

हालांकि ये सभी चीजें सत्य हैं, केवल मुख्य बिंदु पुस्तकालयों का सेट है जो –

+1

@Adam में शामिल हैं: सुनिश्चित नहीं है कि वह ऑब्जेक्ट फ़ाइलों के बारे में बात कर रहा है जो निष्पादन योग्य फाइल नहीं है। जहां तक ​​मैं अपनी मशीन पर देख सकता हूं, अंतर प्रतीक तालिका के आकार में है। मेरे लिए सी संस्करण में वास्तव में तीन बाहरी प्रतीकों का उल्लेख किया गया है, सी ++ के लिए और भी कुछ हैं। –