मौजूदा उत्तर सिर्फ यह दिखाते हैं कि एक प्रकार के आकार के आधार पर "संकलन-समय के जोर" के प्रभाव को कैसे प्राप्त किया जाए। यह इस विशेष मामले में ओपी की जरूरतों को पूरा कर सकता है, लेकिन ऐसे अन्य मामले हैं जहां आपको वास्तव में एक प्रकार के आकार के आधार पर प्रीप्रोसेसर सशर्त की आवश्यकता होती है। यह कैसे करना है:
अपने आप को थोड़ा C प्रोग्राम लिखें जैसे:
/* you could call this sizeof_int.c if you like... */
#include <stdio.h>
/* 'int' is just an example, it could be any other type */
int main(void) { printf("%zd", sizeof(int); }
संकलन करें। अपनी पसंदीदा स्क्रिप्टिंग भाषा में एक स्क्रिप्ट लिखें, जो उपरोक्त C प्रोग्राम को चलाता है और इसके आउटपुट को कैप्चर करता है। C हैडर फ़ाइल उत्पन्न करने के लिए उस आउटपुट का उपयोग करें। उदाहरण के लिए, यदि आप रूबी का उपयोग कर रहे थे, तो ऐसा लग सकता है:
sizeof_int = `./sizeof_int`
File.open('include/sizes.h','w') { |f| f.write(<<HEADER) }
/* COMPUTER-GENERATED, DO NOT EDIT BY HAND! */
#define SIZEOF_INT #{sizeof_int}
/* others can go here... */
HEADER
फिर अपने Makefile या अन्य बिल्ड स्क्रिप्ट में एक नियम जोड़ें, जो इसे बनाने के लिए उपरोक्त स्क्रिप्ट चलाएगा sizes.h
।
sizes.h
जहाँ भी आपको आकार के आधार पर प्रीप्रोसेसर कंडीशन का उपयोग करने की आवश्यकता हो, उन्हें शामिल करें ।
किया हुआ!
(क्या आपने कभी ./configure && make
कोई प्रोग्राम बनाने के लिए टाइप किया है? क्या configure
स्क्रिप्ट मूल रूप से ऊपर की तरह है ...)