क्योंकि प्रीप्रोसेसर चलाने के बाद आकार() की गणना की जाती है, इसलिए जानकारी #if
के लिए उपलब्ध नहीं है।
सी कंपाइलर तार्किक रूप से दो चरणों में विभाजित होते हैं, भले ही अधिकांश आधुनिक कंपाइलर्स उन्हें अलग न करें। सबसे पहले, स्रोत preprocessed है। इसमें सभी प्रीप्रोसेसर सशर्त (2if, #define, परिभाषित शब्दों को उनके प्रतिस्थापन के साथ बदलकर) को बाहर निकालना और प्रतिस्थापित करना शामिल है। तब स्रोत को संकलित करने के लिए, संसाधित किया जाता है। प्रीप्रोसेसर केवल सी की संरचना के बारे में कम से कम अवगत है, इसमें कोई प्रकार का ज्ञान नहीं है, इसलिए यह आकार() के रूप में संकलक-स्तर संरचनाओं को संभाल नहीं सकता है।
स्रोत
2010-02-23 15:53:54
यह ख है ईन ने कई बार पूछा। बस एक खोज करो। यहां एक उत्तर दिया गया है, उदाहरण के लिए, http://stackoverflow.com/questions/1717665/c-throwing-compilation-error-on-sizeof-comparison-in-preprocessor-if – AnT
मुझे लगता है कि आप LISP या योजना की तलाश में हैं :) – leppie