Pular para o conteúdo

Os tipos do C

Qual tipo declarar para cada tipo do C — e os três que mudam de tamanho conforme a plataforma.

A assinatura declarada é a única coisa que o ctypes sabe sobre a função. Um i32 onde o C espera i64 passa em quase toda chamada — e corrompe o resto da pilha na que não passa. O tipo precisa ser o do C, e não o do valor que você tem.

No CDeclareCuidado
int, int32_ti32
unsigned int, uint32_tu32
longi64 no Linux/macOS 64 bits, i32 no Windowso motivo de existir int64_t
long long, int64_ti64
size_ttamanho4 ou 8 bytes conforme a plataforma
double / floatf64 / f32passar f32 onde o C quer double dá lixo
char* (texto)textover Textos
void*, qualquer ponteiroponteiroo tipo do alvo você carrega à parte
char (um caractere)char
nada (void)voidsó como retorno
dataforge
adopt Arcane.C as C

assert C.tamanho_de("i32") is 4
assert C.tamanho_de("f64") is 8
assert C.tamanho_de("tamanho") in [4, 8]          // size_t acompanha a plataforma
assert C.tamanho_de("ponteiro") is C.tamanho_de("tamanho")
out C.tipos()