2014-04-19 13 views
6

Hallo, das verwirrt mich schon lange!Warum gibt es eine Unterstreichung vor wtoi in der Funktion _wtoi Welche Version von Ansi ist atoi?

Vor langer Zeit gibt es nur ANSI Version, die Atoi ist.

Und jetzt (es ist auch lange her) gibt es eine breite Char-Version.

Aber warum die Wide-Char-Version hat eine U-Line ('_') vor Wtoi?

Könnte mir jemand sagen warum? Danke :)

+0

Da Microsoft es dort setzen - keinen anderen Grund. Es ist ihre Funktion, damit sie tun können, was sie wollen; weder 'wtoi()' noch '_wtoi()' sind standardisiert, außer de facto von Microsoft. –

Antwort

4

In den meisten Fällen sind Funktionen, die mit einem führenden Unterstrich beginnen, Implementierungserweiterungen; Sie sind nicht Teil der C Standard Library. (Es gibt Ausnahmen, z. B. _Exit ist Teil der C-Standardbibliothek, obwohl es in der Visual C++ - Implementierung noch nicht implementiert ist.) Bezeichner, die mit einem führenden Unterstrich beginnen, sind reserved in the global namespace, so dass sie für nicht standardmäßige Erweiterungen verwendet werden, um Konflikte mit Benutzern zu vermeiden -definierte Namen.

Was, warum gibt es keine wtoi in dem C Standard Library: Durch die Zeit, Breitzeichen Funktionen der C-Standardbibliothek hinzugefügt wurden, wurde es klar, dass die atoi Schnittstelle fehlerhaft ist, weil there is no way to detect whether the conversion succeeded or failed.

Verwenden Sie nicht atoi oder _wtoi. Verwenden Sie stattdessen die bevorzugten Funktionen strtol und wcstol, die beide Teil der C-Standardbibliothek sind. (Es gibt auch andere-ähnlich benannten Konvertierungsfunktionen für andere Arten, beispielsweise strtof und wcstof zu float und strtoull und wcstoull zu konvertieren unsigned long long zu konvertieren.)

1

Microsoft bietet die Funktionen _atoi_l, _wtoi, _wtoi_l als herstellerspezifische Erweiterungen. Sie sind keine Standard-C/C++ - Bibliotheksfunktionen. Sie haben viele solcher herstellerspezifischen Funktionen, deren Namen von Standard-C/C++ - Bibliotheksfunktionen abgeleitet sind.

+0

Warum bietet die Standard-C/C++ - Bibliothek keine widechar-Version? –

+0

@NorSDNorSD Gute Frage. Ich kenne die Antwort darauf nicht. –