為什麼ctype h中的函式引數都是int型別

2021-09-28 11:11:15 字數 819 閱讀 2916

標頭檔案中包含了一系列與字元處理有關的函式,這些函式有乙個共同特點:它們的引數都是 int 型別。例如:

在編寫c語言程式時,我們通常使用char或者unsigned char來表示乙個字元,而 所包含的字元處理函式的引數都是 int 型別,這是為什麼呢?

中的字元處理函式除了能夠接收 unsigned char 範圍內的「普通」字元,還必須能夠接收乙個無效的字元——eof。

eof 除了可以表示檔案結尾,還可以表示乙個無效的字元。
也就是說,引數要接收的數值範圍大於 char 所能表示的數值範圍,所以引數的型別必須大於char。大於 char 的型別有 short、int、long 等,c語言標準乾脆規定就用 int 吧,這樣綽綽有餘,彈性很大。

char 可以隱式地轉換為 int,我們在給字元處理函式傳參時不需要再進行顯式的(強制的)型別轉換了。

c語言標準規定,中的字元處理函式至少要能夠處理 unsigned char 範圍以內的字元,範圍以外的字元不做要求,各個組織在實現標準庫時可以自由發揮。

這就導致不同的標準庫之間存在差異,例如在 visual studio 中處理 unsigned char 以外的字元會導致斷言失敗,程式終止執行;而在 xcode(基於llvm編譯器)中可以順利處理 unsigned char 以外的字元,比如漢字"中國我愛你!"

在 debug 模式下斷言才會生效。
為了讓**更有相容性,建議使用 中的寬字元處理函式來處理 unsigned char 以外的字元。

c/c++學習**

ctype h中的函式與功能

1 字元測試函式 1 函式原型均為int is x int 2 引數為int,任何實參均被提公升成整型 3 只能正確處理處於 0,127 之間的值 2 字元對映函式 1 函式原型為int to x int 2 對引數進行檢測,若符合範圍則轉換,否則不變 int tolower int a z a z...

C 函式的引數型別中為什麼要加const

const 是用於對常量的修改,帶有const的引用可以稱之為常量引用。但是在函式中為什麼要新增這個呢,比如void fun string 和void fun const string 到底有什麼區別呢,本文就些問題進行簡單介紹。給定給以下兩個函式 void fun1 string s void f...

ctype h庫函式的使用

ctype.h庫函式簡單解析 序號函 數 功 能 說 明 1int isalnum int ch 判斷字元變數ch是否為字母或數字 當ch為數字0 9或字母a z及a z時,返回非零值,否則返回零。2intisalpha int ch 判斷字元變數ch是否為字母 當ch為字母a z及a z時,返回非...