2009-12-17 55 views
16

只是好奇,如果u_char是一個標準。我一直使用它,假設它是與uintX_t類型一起定義的,等等。但我看到我們的一些代碼庫從u_char過渡到「無符號字符」,原因是「所以用戶不必定義u_char本身」。u_char是標準嗎?

+5

u_char是不是官方ANSI C標準 –

回答

4

它不存在於任何舊的頭文件中(除了某些特定區域,像Kerberos和網絡標頭),而不是我知道的任何編譯器中的內置類型。

12

字符串u_char沒有出現在這個C標準的草案:

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

它不是由POSIX要求要麼,據我所知。

我認爲它在BSD(sys/types.h)和Windows(winsock.h)中。我不認爲任何一個人都是「一個標準」 - 他們不是正式的標準,他們當然不是標準C的一部分,但他們是明確定義和記錄的。

+1

的一部分,而且使用這些醜陋的非標準類型的問題是,你必須非常小心定義它們。有些系統已經定義了它們(這是錯誤的),如果你自己定義它們,會導致錯誤,但是其他系統不會,這意味着除非你自己定義它,否則不能使用該類型。最安全的方法就是不要像這樣使用垃圾,不要懶惰,當你指出它時寫出'unsigned char'。 –

+0

@R ..或使用''作爲'uint8_t',...類型。 –

+5

@JonathonReinhart:實際上使用'uint8_t'有一個內置的斷言'CHAR_BIT == 8',因爲如果CHAR_BIT> 8,類型被禁止存在。如果你想要一個8位的類型,這很好,但是如果你的意思是「在這個實現中佔用一個存儲單元的一個無符號整數類型,不管可能是什麼」,那麼你應該說:'unsigned char'。 –