2009-12-17 10 views
16

Solo curioso se u_char è uno standard. L'ho sempre usato assumendo che fosse definito insieme ai tipi uintX_t e così via. Ma sto vedendo alcuni dei nostri codici di transizione da u_char a "unsigned char" con un motivo "quindi gli utenti non devono definire u_char" ..È u_char uno standard?

+5

u_char non fa parte dello standard ANSI C ufficiale –

risposta

4

Non è presente in alcun file di intestazione precedente (tranne alcune aree specifiche , come Kerberos e intestazioni di rete), e non un tipo predefinito in alcun compilatore che conosca.

12

La stringa u_char non appare in questa bozza dello standard C:

http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf

Non è richiesto da POSIX sia, per quanto ne so.

Penso che sia in BSD (sys/types.h) e Windows (winsock.h). Non considererei uno dei due uno "standard" - non sono standard formali, e certamente non fanno parte dello standard C, ma sono chiaramente definiti e documentati.

+1

Inoltre, il problema di utilizzare questi tipi non standard non validi è che devi essere molto attento a definirli. Alcuni sistemi li hanno già definiti (che è sbagliato), portando a errori se li definisci tu stesso, ma altri no, il che significa che non puoi usare il tipo a meno che tu non lo definisca da solo. Il modo più sicuro è non usare la posta indesiderata come questa, non essere pigro e scrivere "char unsigned" quando lo intendi. –

+0

@R .. oppure usare '' per i tipi 'uint8_t', .... –

+5

@JonathonReinhart: l'uso di 'uint8_t' ha in effetti un'asserzione incorporata che' CHAR_BIT == 8', poiché il tipo è proibito esistere se 'CHAR_BIT> 8'. Va bene se vuoi un tipo a 8 bit, ma se quello che intendi è "un tipo intero senza segno che occupa un'unità di archiviazione in questa implementazione, qualunque cosa possa essere", allora dovresti dire: "unsigned char". –

5

No, u_char non standard. Se è necessario utilizzare un tipo standard equivalente a u_char, è possibile utilizzare uint8_t che fa parte della libreria standard C99 (controllare le piattaforme/compilatori specifici per conformità C99). stdint.h definisce questo tipo (insieme a molti altri tipi integrali specifici). This Wikipedia article contains more information about stdint.h.

Problemi correlati