Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C में फंक्शन पैरामीटर्स का इवैल्यूएशन ऑर्डर


C मानक में फंक्शन आर्गुमेंट्स का इवैल्यूएशन ऑर्डर **अनस्पेसिफाइड** (अनिर्दिष्ट) है। कंपाइलर किसी भी क्रम में इवैल्यूएट कर सकता है।

उदाहरण

#include <stdio.h>

void test_function(int x, int y, int z) {
    printf("x = %d\n", x);
    printf("y = %d\n", y);
    printf("z = %d\n", z);
}

int main() {
    int a = 10;
    test_function(a++, a++, a++);  // अनडिफाइंड बिहेवियर!
    return 0;
}

संभावित आउटपुट (GCC, राइट-टू-लेफ्ट)

x = 12
y = 11
z = 10

महत्वपूर्ण चेतावनी

  • यह अनडिफाइंड बिहेवियर (UB) है - C11 §6.5.2.2: "आर्गुमेंट्स का इवैल्यूएशन ऑर्डर अनस्पेसिफाइड है" और एक ही स्केलर ऑब्जेक्ट पर अनसीक्वेंस्ड साइड इफेक्ट्स UB हैं।
  • ऊपर का आउटपुट केवल एक कंपाइलर/ऑप्टिमाइज़ेशन लेवल पर देखे गए व्यवहार को दर्शाता है।
  • अलग कंपाइलर, ऑप्टिमाइज़ेशन लेवल, या आर्किटेक्चर अलग परिणाम दे सकता है।

सही कोड

int a = 10;
int x = a++;
int y = a++;
int z = a++;
test_function(x, y, z);  // स्पष्ट, परिभाषित व्यवहार

C++17 सुधार

  • C++17 में: फंक्शन आर्गुमेंट्स का इवैल्यूएशन **अनसीक्वेंस्डली इंडिटरमिनेटली सीक्वेंस्ड** है (लेकिन अभी भी अनस्पेसिफाइड ऑर्डर)।
  • फिर भी, एक ही वेरिएबल पर मल्टीपल साइड इफेक्ट्स UB रहते हैं।

नियम

कभी भी एक ही स्टेटमेंट में एक ही वेरिएबल को एक से अधिक बार मॉडिफाई न करें जब तक कि सीक्वेंस पॉइंट्स (&&, ||, ?, :, , (कॉमा ऑपरेटर), ;) द्वारा सीक्वेंस्ड न हों।

  1. - जावास्क्रिप्ट में फंक्शन पैरामीटर्स क्या हैं?

    जावास्क्रिप्ट के साथ, आप फंक्शन कॉल करते समय अलग-अलग पैरामीटर्स पास कर सकते हैं। ये पास किए गए पैरामीटर्स फंक्शन के अंदर कैप्चर किए जा सकते हैं और उन पैरामीटर्स पर कोई भी मैनिपुलेशन किया जा सकता है। एक फंक्शन कॉमा से अलग कई पैरामीटर्स ले सकता है।उदाहरणजावास्क्रिप्ट फंक्शन्स में पैरामीटर्स जोड़ना सीख

  1. JavaScript फंक्शन पैरामीटर्स: आर्गुमेंट्स पास करना JavaScript फंक्शन पैरामीटर्स: आर्गुमेंट्स पास करना

    JavaScript फंक्शन पैरामीटर्स फंक्शन में मान पास करने का तरीका प्रदान करते हैं। ES6 ने डिफ़ॉल्ट पैरामीटर्स, रेस्ट पैरामीटर्स, और डिस्ट्रक्चरिंग जैसी शक्तिशाली विशेषताएं पेश कीं। उदाहरण { test(Hello, World, 22, 99, extra); }); </script> </body> </html> आउटपुट फंक्शन

  1. C भाषा में strcmp() फंक्शन क्या है? C भाषा में strcmp() फंक्शन क्या है?

    C लाइब्रेरी फंक्शन int strcmp(const char *str1, const char *str2) str1 द्वारा इंगित स्ट्रिंग की तुलना str2 द्वारा इंगित स्ट्रिंग से करता है। कैरेक्टर्स का ऐरे स्ट्रिंग कहलाता है। घोषणा ऐरे के लिए घोषणा निम्नलिखित है: char stringname[size]; उदाहरण: char string[50]; 50 कैरेक्टर्स लंबाई की स्ट्रिंग