c - Can you decipher the difference between this switch() and an equivalent for()? -


यह एक काम करता है:

  if (clu.raw.butsnum) {int मैं; (I = 0; i & lt; clu.raw.butsnum; i ++) {if (clu.raw.buts [i] और RI_MOUSE_BUTTON_1_DOWN के लिए) Com_QueueEvent (0, SE_KEY, K_MOUSE1, qtrue, 0, NULL); अगर (clu.raw.buts [i] और RI_MOUSE_BUTTON_2_DOWN) Com_QueueEvent (0, SE_KEY, K_MOUSE2, qtrue, 0, NULL); अगर (clu.raw.buts [i] और RI_MOUSE_BUTTON_3_DOWN) Com_QueueEvent (0, SE_KEY, K_MOUSE3, qtrue, 0, NULL); अगर (clu.raw.buts [i] और RI_MOUSE_BUTTON_4_DOWN) Com_QueueEvent (0, SE_KEY, K_MOUSE4, qtrue, 0, NULL); अगर (clu.raw.buts [i] और RI_MOUSE_BUTTON_5_DOWN) Com_QueueEvent (0, SE_KEY, K_MOUSE5, qtrue, 0, NULL); अगर (clu.raw.buts [i] और RI_MOUSE_BUTTON_1_UP) Com_QueueEvent (0, SE_KEY, K_MOUSE1, qfalse, 0, NULL); अगर (clu.raw.buts [i] और RI_MOUSE_BUTTON_2_UP) Com_QueueEvent (0, SE_KEY, K_MOUSE2, qfalse, 0, NULL); अगर (clu.raw.buts [i] और RI_MOUSE_BUTTON_3_UP) Com_QueueEvent (0, SE_KEY, K_MOUSE3, qfalse, 0, NULL); अगर (clu.raw.buts [i] और RI_MOUSE_BUTTON_4_UP) Com_QueueEvent (0, SE_KEY, K_MOUSE4, qfalse, 0, NULL); अगर (clu.raw.buts [i] और RI_MOUSE_BUTTON_5_UP) Com_QueueEvent (0, SE_KEY, K_MOUSE5, qfalse, 0, NULL); } Clu.raw.butsnum = 0;  

लेकिन यह एक,

  अगर (clu.raw.butsnum) {लघु int down = qfalse; इंट लेकिन = 0, आई; के लिए (i = 0; i & lt; clu.raw.butsnum; i ++) {स्विच (clu.raw.buts [i]) {केस RI_MOUSE_BUTTON_1_DOWN: down = qtrue; लेकिन = K_MOUSE1; टूटना; मामले RI_MOUSE_BUTTON_2_DOWN: नीचे = qtrue; लेकिन = K_MOUSE2; टूटना; मामले RI_MOUSE_BUTTON_3_DOWN: नीचे = qtrue; लेकिन = K_MOUSE3; टूटना; मामले RI_MOUSE_BUTTON_4_DOWN: नीचे = qtrue; लेकिन = K_MOUSE4; टूटना; मामले RI_MOUSE_BUTTON_5_DOWN: नीचे = qtrue; लेकिन = K_MOUSE5; टूटना; मामले RI_MOUSE_BUTTON_1_UP: नीचे = qfalse; लेकिन = K_MOUSE1; टूटना; मामले RI_MOUSE_BUTTON_2_UP: नीचे = qfalse; लेकिन = K_MOUSE2; टूटना; मामले RI_MOUSE_BUTTON_3_UP: नीचे = qfalse; लेकिन = K_MOUSE3; टूटना; मामले RI_MOUSE_BUTTON_4_UP: नीचे = qfalse; लेकिन = K_MOUSE4; टूटना; मामले RI_MOUSE_BUTTON_5_UP: नीचे = qfalse; लेकिन = K_MOUSE5; टूटना; } Com_QueueEvent (0, SE_KEY, लेकिन, नीचे, 0, शून्य); }} Clu.raw.butsnum = 0;  

.. कभी-कभी "इसे खो देता है" और यदि कुछ "माउस बटन" (उस कोड में) दबाए नहीं जाते हैं यदि वे बहुत तेज़ी से मारा जाता है।

वैसे भी, मुझे लगता है कि कोड खुद की प्रासंगिकता थोड़ा है

क्यों उन कोड के टुकड़े बिल्कुल एक ही बात नहीं करते?

<पी > स्विच लेखन की तरह है

  अगर (clu.raw.buts [i] == VALUE)  

जो

से भिन्न है < पूर्व> अगर (clu.raw.buts [i] और मूल्य)

स्पष्ट रूप से पहले "पकड़" VALUE iff यह केवल clu में रखा घटना है raw.buts [i] । इसके बजाय, सभी RI_stuffs clu.raw.buts [i] में बिट्स या-एड हैं, इसलिए यह देखने का एकमात्र तरीका है कि क्या वे (1) या स्पष्ट (0) सेट हैं & Amp; (बिटवर्ड और) ऑपरेटर।

उदाहरण अगर clu.raw.buts [i] 0100 है और VALUE 0100 है, तो आप इसे पकड़ लेते हैं। अगर clu.raw.buts [i] 0110 है, तो आप इसे == के साथ 0100 नहीं देख पाएंगे, जबकि आप इसे "code" के साथ "देख" देखेंगे। 0100 ।


Comments