2014-04-19 51 views
6

你好!這讓我很困惑!爲什麼在函數_wtoi中的wtoi之前有一個下劃線,其中ansi版本是atoi?

很久以前,只有ansi版本是atoi。

現在(它也是很久以前)有一個寬字符版本。

但是爲什麼寬字符版本在wtoi之前有一個uderline('_')?

難道有人告訴我爲什麼嗎? 謝謝:)

+0

因爲微軟把它放在那裏 - 沒有其他原因。這是他們的功能,所以他們可以按照自己的喜好去做;既不是'wtoi()'也不'_wtoi()'是標準化的,事實上微軟除外。 –

回答

4

大多數情況下,以前導下劃線開頭的函數都是實現添加;它們不是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。而應使用更好的strtolwcstol函數,它們都是C標準庫的一部分。 (還有其他類型,例如strtofwcstof其他類似命名的轉換功能轉換到floatstrtoullwcstoull轉換爲unsigned long long)。

1

Microsoft提供的功能_atoi_l, _wtoi, _wtoi_l作爲供應商特定的擴展。它們不是標準的C/C++庫函數。他們有很多這樣的供應商特定函數,其名稱來自標準C/C++庫函數。

+0

爲什麼標準C/C++庫不提供widechar版本? –

+0

@NorSDNorSD好問題。我不知道這個答案。 –

相關問題