Почему перед wtoi в функции _wtoi есть подчеркивание, какая версия ansi является atoi?

Привет! Меня давно это смущало!

Давным-давно существовала только анси-версия atoi.

А сейчас (тоже давно) есть широкоформатная версия.

Но почему в версии с широкими символами перед wtoi есть uderline ('_')?

Может ли кто-нибудь сказать мне, почему? Спасибо :)


person NorSD NorSD    schedule 19.04.2014    source источник
comment
Потому что Microsoft поместила его туда — и никакой другой причины. Это их функция, поэтому они могут делать с ней все, что им заблагорассудится; ни wtoi(), ни _wtoi() не стандартизированы, за исключением, де-факто, Microsoft.   -  person Jonathan Leffler    schedule 19.04.2014


Ответы (2)


По большей части функции, начинающиеся со знака подчеркивания, являются дополнениями к реализации; они не являются частью стандартной библиотеки C. (Есть исключения, например, _Exit является частью стандартной библиотеки C, хотя она еще не реализована в реализации Visual C++.) Идентификаторы, начинающиеся с ведущего символа подчеркивания: зарезервированы в глобальном пространстве имен, поэтому они используются для нестандартных расширений, чтобы избежать конфликта с пользовательскими расширениями. имена.

Что касается того, почему в стандартной библиотеке C нет wtoi: к тому времени, когда функции широких символов были добавлены в стандартную библиотеку C, стало понятно, что интерфейс atoi неисправен, потому что невозможно определить, успешно ли выполнено преобразование или нет.

Не используйте atoi или _wtoi. Вместо этого используйте предпочтительные функции strtol и wcstol, обе из которых являются частью стандартной библиотеки C. (Существуют другие функции преобразования с аналогичными именами для других типов, например, strtof и wcstof для преобразования в float и strtoull и wcstoull для преобразования в unsigned long long.)

person James McNellis    schedule 19.04.2014

Корпорация Майкрософт предоставляет функции _atoi_l, _wtoi, _wtoi_l в качестве расширений для конкретных поставщиков. Они не являются стандартными библиотечными функциями C/C++. У них есть много таких специфичных для поставщика функций, имена которых получены из стандартных библиотечных функций C/C++.

person R Sahu    schedule 19.04.2014
comment
Почему стандартная библиотека C/C++ не предоставляет широкоформатную версию? - person NorSD NorSD; 19.04.2014
comment
@NorSDNorSD Хороший вопрос. Я не знаю ответа на этот вопрос. - person R Sahu; 19.04.2014