क्या हम #define के लिए निष्पादन योग्य कथन नहीं लिख सकते हैं?

मुझे 27 क्यों मिलते हैं? #define निष्पादन योग्य कथन 5 + 2 नहीं ले सकता?

#include
#include
#define x 5+2
void main()
{
    int i;
    i=x*x*x;
    printf("%d",i):
    getch();
}

आउटपुट:

27

मुझे जवाब के रूप में 343 मिलना चाहिए।

0
इसमें बहुत सारे डुप्लिकेट हैं ... - काफी उचित है, उन्हें ढूंढना मुश्किल है।
जोड़ा लेखक alk, स्रोत
@ पास्कल क्यूक: वास्तव में, यहां के विभिन्न पहलुओं पर एक सामाजिक रूप से/मनोवैज्ञानिक विश्लेषण भी एक दिलचस्प परियोजना हो सकती है।
जोड़ा लेखक alk, स्रोत
@alk यह दिलचस्प है कि इस ओपी ने माना कि यदि यह संकलित होता है लेकिन अपेक्षित परिणाम नहीं उत्पन्न करता है, तो इसका मतलब यह होना चाहिए कि मैक्रोज़ का एक निश्चित तरीका ("नहीं कर सकता) का उपयोग करने के लिए किसी भी तरह से मना किया गया था जबकि लिंक किए गए प्रश्न में ओपी को दोष दिया गया था संकलन मंच ("अजीब") के लिए।
जोड़ा लेखक Pascal Cuoq, स्रोत

2 उत्तर

सबसे पहले, यह निष्पादन योग्य कथन नहीं है, यह एक अभिव्यक्ति है। एक नहीं, यह 343 नहीं होना चाहिए, क्योंकि अभिव्यक्ति को संश्लेषित नहीं किया जाना चाहिए। इसके कारण, गुणा को अतिरिक्तता के साथ प्राथमिकता लेती है, इसलिए अभिव्यक्ति का मूल्यांकन किया जा रहा है

5+2*5+2*5+2

जो है

5+(2*5)+(2*5)+2 = 27

यह छोटा उदाहरण मैक्रोज़ के खतरों को दिखाता है। आपको अभिव्यक्तियों का प्रतिनिधित्व करने वाले मैक्रोज़ की सामग्री को हमेशा संश्लेषित करना चाहिए। इसके अलावा, आपको मैक्रो अभिव्यक्तियों के पैरामीटर को हमेशा संश्लेषित करना चाहिए।

1
जोड़ा

मैक्रोज़ मुश्किल हैं, क्योंकि वे फ़ंक्शन नहीं हैं, बस टेक्स्ट प्रतिस्थापन। इसलिए, आपकी अभिव्यक्ति बन जाती है:

i=5+2*5+2*5+2;

समाधान: निरंतर उपयोग करें, या अपने मैक्रो को कोष्ठक में लपेटें

#define x (5+2)
0
जोड़ा