2014-04-19 6 views
6

Witam, przez długi czas jestem zdezorientowany!Dlaczego istnieje podkreślenie przed wtoi w funkcji _wtoi, której wersją ansi jest atoi?

Dawno, dawno temu, istnieje tylko wersja ansi, która jest atoi.

A teraz (już dawno temu) dostępna jest szeroka wersja.

Ale dlaczego szeroka wersja char ma linię prostą ("_") przed wtoi?

Czy ktoś może mi powiedzieć, dlaczego? Dzięki :)

+0

Ponieważ Microsoft umieścił go tam - nie ma innego powodu. To ich funkcja, dzięki czemu mogą robić, co im się podoba; ani 'wtoi()' ani '_wtoi()' nie są standaryzowane, z wyjątkiem de facto przez Microsoft. –

Odpowiedz

4

W przeważającej części funkcje rozpoczynające się od wiodącego podkreślenia to dodatki do implementacji; nie są częścią C Standard Library. (Istnieją wyjątki, np. _Exit jest częścią C Standard Library, ale nie jest jeszcze zaimplementowana w implementacji Visual C++.) Identyfikatory zaczynające się od wiodącego podkreślenia to reserved in the global namespace, więc są używane do niestandardowych rozszerzeń, aby uniknąć konfliktu z użytkownikiem -zdefiniowane nazwy.

Jak, dlaczego nie ma wtoi w Biblioteka standardowa języka C: Przez czas szerokie funkcje znakowe zostały dodane do biblioteki standardowej C, było zrozumiałe, że interfejs atoi jest błędna, ponieważ there is no way to detect whether the conversion succeeded or failed. Nie należy używać . Zamiast tego należy użyć preferowanych funkcji strtol i wcstol, które należą do C Standard Library. (Istnieją inne podobnie nazwane funkcje konwersji do innych typów, np strtof i wcstof przekonwertować float i strtoullwcstoull i przekonwertować na unsigned long long.)

1

Firma Microsoft udostępnia funkcje _atoi_l, _wtoi, _wtoi_l jako rozszerzenia specyficzne dla danego dostawcy. Nie są one standardowymi funkcjami bibliotecznymi C/C++. Mają wiele takich specyficznych dla dostawcy funkcji, które mają nazwy pochodne od standardowych funkcji biblioteki C/C++.

+0

Dlaczego standardowa biblioteka C/C++ nie udostępnia wersji Widechar? –

+0

@NorSDNorSD Dobre pytanie. Nie znam odpowiedzi na to. –