2011-02-16 14 views
8

मेरा प्रोफेसर और मैं सी में + = ऑपरेटर के बारे में बहस में शामिल हूं। वह कहता है कि + = या = + काम करेगा, लेकिन वह निश्चित नहीं है क्यों = काम करता है।सी प्रोग्रामिंग: + = बनाम = +

int main() 
{ 
    int i = 0, myArray[5] = {1,1,1,1,1}; 

    while(i < 5) 
    { 
      myArray[i] += 3 + i; 
      printf("%d\n", myArray[i]); 
      i++; 
    } 

    system("pause"); 
} 

आउटपुट 4, 5, 6, 7, 8 उत्पन्न करेगा। + = ऑपरेटर को = + में बदलना एक ही परिणाम उत्पन्न करता है। हालांकि - = = जैसा नहीं करता है - (जो स्पष्ट है क्योंकि यह 3 को 3 के रूप में मानता है)।

तो सी गुरु:

  • क्यों साथ = + इस काम करता है?
  • सी संकलक का इलाज कैसे करता है = + बनाम + =?
+3

किस कंपाइलर का उपयोग करके यह वही परिणाम उत्पन्न करता है ??? –

+3

ऑपरेटर को = + उपज '3,4,5,6,7' में बदलना। शायद आप recompiling या कुछ से पहले स्रोत फ़ाइल को सहेजना भूल गए? – mtrw

+2

आपका प्रोफेसर अक्षम है और रिटायर होना चाहिए। –

उत्तर

22

वह गलत है; +==+ से बिल्कुल अलग है।

अभिव्यक्ति x =+ 3x = (+3) के रूप में पार्स किया गया है।
यहां, + यूनिट + ऑपरेटर (बल्कि बेकार) बन जाता है। (अस्वीकृति के विपरीत)

अभिव्यक्ति x =- 3 को यूनरी अस्वीकरण ऑपरेटर का उपयोग करके x = (-3) के रूप में पार्स किया गया है।

1

+- जैसा एक यूनरी ऑपरेटर भी है।

+0

आप लॉजिकल लीप गायब हैं जो वास्तव में इस सवाल का जवाब देता है। –

+1

इस तरह के प्रश्नों के लिए (गैर एपीआई प्रश्न) मैं कम से कम विशिष्ट उत्तर प्रदान करना चाहता हूं जो समाधान की दिशा में पोस्टर को दबाएगा। मैंने जो कुछ भी सीखा और याद किया वह मैं अपने पास पहुंचा हूं। सब कुछ मैं भूल गया था मैं चम्मच था। – Novikov

3

कोड

myArray[i] += 3 + i; 

myArray[i] = myArray[i] + 3 + i;

जबकि

myArray[i] =+ 3 + i; 

पैदावार myArray[i] = 3 + i

है कि मैं क्या मिला निकलेगा।

14

आपका प्रोफेसर प्राचीन जो =+, =-, =* आदि में वास्तव में किया था मतलब एक ही बात += के रूप में सी के संस्करणों, -=, *= आदि (हम संस्करण आम तौर पर के रूप में भेजा से अधिक उम्र के बात कर रहे हैं याद है "के & आर" यहां। संस्करण 6 यूनिक्स, अगर स्मृति परोसता है।)

वर्तमान सी के संस्करण, उनका मतलब एक ही बात नहीं है; बराबर चिह्न वाले संस्करणों को पहले वर्णित किया जाएगा जैसे बराबर के बीच एक जगह थी और जो कुछ भी आता है। यह =- और =+ के लिए एक वैध प्रोग्राम (हालांकि एक प्रोग्राम नहीं है जो आप उम्मीद करते हैं) उत्पन्न करने के लिए होता है क्योंकि - और + यूनरी ऑपरेटरों के रूप में उपयोग किया जा सकता है।

=* या =/ तर्क को सुलझाने के लिए उपयोग किया जा सकता है।a *= 3 तीन से a गुणा करेंगे, और a /= 3 तीन से विभाजित होगा, लेकिन a =* 3 एक अर्थ त्रुटि है (क्योंकि एकल * केवल संकेत के लिए लागू किया जा सकता है) और a =/ 3 एक सिंटैक्स त्रुटि है (क्योंकि /एक एकल के रूप में नहीं इस्तेमाल किया जा सकता ऑपरेटर)।

+0

हां, यदि आप लायंस बुक में कोड देखते हैं, तो आप देखेंगे कि यह ऑपरेटर को '= +' के रूप में मंत्रमुग्ध करता है (इसमें अवधि के सी के कुछ अन्य उदाहरण भी शामिल हैं, जैसे गैर- संरचना प्रकार)। – caf

+1

यहां बी मैनुअल (सी से बी अनुकूलित किया गया था) यहां है: http://cm.bell-labs.com/cm/cs/who/dmr/kbman.html। यह पहली स्थिति में बराबर चिह्न के साथ आकांक्षा ऑपरेटरों को दिखाता है। –

+1

= + को यूनिक्स संस्करण 6 से यूनिक्स संस्करण 7 में 70 के दशक में कुछ समय में + = में बदल दिया गया था, जब सी भाषा में कई अन्य बदलाव किए गए थे, मुख्य रूप से इसे पीडीपी- 1 1। –

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