As respostas existentes mostram apenas como obter o efeito de "afirmações em tempo de compilação" com base no tamanho de um tipo. Isso pode atender às necessidades do OP neste caso específico, mas há outros casos em que você realmente precisa de uma condicional de pré-processador com base no tamanho de um tipo. Veja como fazer:
Escreva para você mesmo um pequeno programa C como:
/* 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); }
Compile isso. Escreva um script em sua linguagem de script favorita, que executa o programa C acima e captura sua saída. Use essa saída para gerar um arquivo de cabeçalho C. Por exemplo, se você estiver usando Ruby, pode ser parecido com:
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
Em seguida, adicione uma regra ao seu Makefile ou outro script de construção, que fará com que ele execute o script acima para construir sizes.h
.
Inclua sizes.h
sempre que for necessário usar condicionais de pré-processador com base em tamanhos.
Feito!
(Você já digitou ./configure && make
para construir um programa? O que os configure
scripts fazem é basicamente igual ao descrito acima ...)