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

C/C++ में प्री-इन्क्रीमेंट और पोस्ट-इन्क्रीमेंट


++x (प्री-इन्क्रीमेंट) और x++ (पोस्ट-इन्क्रीमेंट) दोनों वेरिएबल बढ़ाते हैं, लेकिन **वैल्यू** और **सीक्वेंस पॉइंट** व्यवहार में भिन्न हैं।

मुख्य अंतर

पहलूप्री-इन्क्रीमेंट (++x)पोस्ट-इन्क्रीमेंट (x++)
वैल्यूबढ़ाया गया मानमूल मान
प्रभावतत्कालसीक्वेंस पॉइंट पर/पहले
ऑपरेंडलवैल्यू आवश्यकलवैल्यू आवश्यक
प्रेसिडेंसपोस्टफिक्स से अधिकप्रीफिक्स से कम
असोसिएटिविटीराइट-टू-लेफ्टलेफ्ट-टू-राइट

उदाहरण

#include <iostream>
using namespace std;

int main() {
    int x = 10, y = 10, z;
    
    z = ++x;  // x=11, z=11
    cout << "++x: z=" << z << ", x=" << x << endl;
    
    z = y++;  // z=10, y=11
    cout << "y++: z=" << z << ", y=" << y << endl;
    
    // जटिल अभिव्यक्ति
    int a = 5;
    int b = ++a + a++;  // अनडिफाइंड बिहेवियर! (C++17 से पहले)
    // C++17: ++a पहले (a=6), फिर a++ (वैल्यू 6, a=7) → b = 6+6=12
    
    return 0;
}

आउटपुट

++x: z=11, x=11
y++: z=10, y=11

अनडिफाइंड बिहेवियर चेतावनी

// खतरनाक: एक ही वेरिएबल पर मल्टीपल अनसीक्वेंस्ड साइड इफेक्ट्स
i = i++ + ++i;        // UB
a[i++] = i;           // UB (C++17 से पहले)
printf("%d %d", i++, i++);  // UB: आर्गुमेंट इवैल्यूएशन ऑर्डर अनिर्दिष्ट

सर्वोत्तम अभ्यास

  • कॉम्प्लेक्स एक्सप्रेशन्स में एक ही वेरिएबल पर मल्टीपल इन्क्रीमेंट/डिक्रीमेंट से बचें।
  • स्टेटमेंट्स में अलग करें: ++x; y = x; बजाय y = ++x; जब स्पष्टता चाहिए।
  • लूप्स में ++i प्राथमिकता दें (कॉपी नहीं बनती, हालांकि ऑप्टिमाइज़र इसे हैंडल करता है)।
  1. - C/C++ में ungetc()

    ungetc() फंक्शन एक कैरेक्टर लेता है और उसे स्ट्रीम में वापस धकेलता है ताकि कैरेक्टर को फिर से पढ़ा जा सके। C भाषा में ungetc() का सिंटैक्स यहाँ है, int ungetc(int character, FILE *stream) यहाँ, character - स्ट्रीम में वापस धकेला जाने वाला कैरेक्टर। stream - फाइल ऑब्जेक्ट का पॉइंटर। C भाषा में ungetc

  1. - C/C++ में isblank()

    फ़ंक्शन isblank() का उपयोग यह जांचने के लिए किया जाता है कि पास किया गया कैरेक्टर ब्लैंक है या नहीं। यह मूल रूप से एक स्पेस कैरेक्टर है और यह टैब कैरेक्टर (\t) पर भी विचार करता है। यह फ़ंक्शन C भाषा में ctype.h हेडर फ़ाइल में और C++ भाषा में cctype हेडर फ़ाइल में घोषित है। यहां C++ भाषा में isblank

  1. - C/C++ में strdup() और strndup()

    strdup() फ़ंक्शन strdup() का उपयोग स्ट्रिंग को डुप्लिकेट करने के लिए किया जाता है। यह नल-टर्मिनेटेड बाइट स्ट्रिंग का पॉइंटर लौटाता है। यहां C भाषा में strdup() का सिंटैक्स है: char *strdup(const char *string); यहां C भाषा में strdup() का एक उदाहरण है: उदाहरण #include <stdio.h> #include <