你好!這讓我很困惑!爲什麼在函數_wtoi中的wtoi之前有一個下劃線,其中ansi版本是atoi?
很久以前,只有ansi版本是atoi。
現在(它也是很久以前)有一個寬字符版本。
但是爲什麼寬字符版本在wtoi之前有一個uderline('_')?
難道有人告訴我爲什麼嗎? 謝謝:)
你好!這讓我很困惑!爲什麼在函數_wtoi中的wtoi之前有一個下劃線,其中ansi版本是atoi?
很久以前,只有ansi版本是atoi。
現在(它也是很久以前)有一個寬字符版本。
但是爲什麼寬字符版本在wtoi之前有一個uderline('_')?
難道有人告訴我爲什麼嗎? 謝謝:)
大多數情況下,以前導下劃線開頭的函數都是實現添加;它們不是C標準庫的一部分。 (也有例外,例如_Exit
是C標準庫的一部分,儘管它尚未在Visual C++實現中實現。)以前導下劃線開頭的標識符爲reserved in the global namespace,因此它們用於非標準擴展以避免與用戶發生衝突 - 定義的名稱。
至於爲什麼存在C標準庫中沒有wtoi
:通過寬字符的功能被添加到C標準庫的時候,它的理解是,atoi
接口是有缺陷的,因爲there is no way to detect whether the conversion succeeded or failed。請使用atoi
或_wtoi
。而應使用更好的strtol
和wcstol
函數,它們都是C標準庫的一部分。 (還有其他類型,例如strtof
和wcstof
其他類似命名的轉換功能轉換到float
和strtoull
和wcstoull
轉換爲unsigned long long
)。
Microsoft提供的功能_atoi_l, _wtoi, _wtoi_l
作爲供應商特定的擴展。它們不是標準的C/C++庫函數。他們有很多這樣的供應商特定函數,其名稱來自標準C/C++庫函數。
爲什麼標準C/C++庫不提供widechar版本? –
@NorSDNorSD好問題。我不知道這個答案。 –
因爲微軟把它放在那裏 - 沒有其他原因。這是他們的功能,所以他們可以按照自己的喜好去做;既不是'wtoi()'也不'_wtoi()'是標準化的,事實上微軟除外。 –