2010-01-08 26 views
11

निम्न कोड क्यों संकलित करता है?यह कोड स्निपेट संकलित क्यों करता है?

#include <stdio.h> 

int main(void) { 
    getchar; 
} 
+20

क्योंकि इसकी त्रुटि-मुक्त है? –

+1

@Xinxua - +1/सहमत –

+0

यह मूल रूप से उबलता है कि 'getchar' को मैक्रो होने की अनुमति है या नहीं। यदि ऐसा है, तो कोड सही नहीं हो सकता है। –

उत्तर

28

.. क्योंकि फ़ंक्शन नाम उन कार्यों, जो कर रहे हैं खुद को पूर्णांकों की तरह ज्यादा महत्व देता करने के लिए समारोह संकेत करने के लिए उपनाम हैं, तो यह अर्थ की दृष्टि से बहुत

#include <stdio.h> 

int main(void) { 
    42; 
} 

यह वैध लेकिन व्यर्थ है के समान है।

+2

और बहुत परेशान !!!! टाइपिंग, "x = getX()" के बजाय "int x = getX" काफी खुशी से काम करेगा और कुछ यादृच्छिक पता मान x में डाल देगा। –

+0

मुझे सी से नफरत है> _ <[15 char filler] – missingfaktor

+1

@Rahul: यह एक बहुत * बहुभुज * रवैया की तरह नहीं है! – Tarydon

13

इसी कारण 1; संकलन होगा, getchar सिर्फ एक समारोह के लिए एक पता है। परिणाम का मूल्यांकन किया जाता है, फिर त्याग दिया जाता है। भाषा विनिर्देश में, इसे "अभिव्यक्ति कथन" कहा जाता है;

2

सी अजीब है, यह कोड भी संकलित है, लेकिन यह सेगफाल्ट करता है जो रिकॉर्ड के लिए सी इतिहास में सबसे छोटा सीगफॉल्ट है।

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