Jawaban yang ada hanya menunjukkan bagaimana mencapai efek "pernyataan waktu kompilasi" berdasarkan ukuran tipe. Itu mungkin memenuhi kebutuhan OP dalam kasus khusus ini, tetapi ada kasus lain di mana Anda benar-benar membutuhkan praprosesor bersyarat berdasarkan ukuran suatu tipe. Berikut cara melakukannya:
Tulis sendiri program C kecil seperti:
/* 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); }
Kompilasi itu. Tulis skrip dalam bahasa skrip favorit Anda, yang menjalankan program C di atas dan menangkap hasilnya. Gunakan output tersebut untuk menghasilkan file header C. Misalnya, jika Anda menggunakan Ruby, akan terlihat seperti ini:
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
Kemudian tambahkan aturan ke Makefile Anda atau skrip build lainnya, yang akan membuatnya menjalankan skrip di atas untuk membangun sizes.h
.
Sertakan di sizes.h
mana pun Anda perlu menggunakan praprosesor bersyarat berdasarkan ukuran.
Selesai!
(Pernahkah Anda mengetik ./configure && make
untuk membangun program? configure
Skrip apa yang pada dasarnya sama seperti di atas ...)