Microsoft-Funktionen, sind sie jetzt Teil des C ++ - Standards? - C ++, Standards

Ich habe gerade meine IDE in MS Visual geändertStudio 2005 kommt von MSVC ++ 6, und ich habe viele Verwarnungswarnungen erhalten. Anstatt die Warnung zu ignorieren, habe ich begonnen, sie in die Äquivalente von _s zu ändern. Ich habe dann jedoch herausgefunden, dass es sich um reine Microsoft-Implementierungen handelt.

Ich habe irgendwo gelesen, dass sie darauf drängten, dass diese Teil des Standards werden. Ist es?

Ist es eine gute Idee, diese _s Funktionen zu verwenden? Oder sollte ich etwas anderes benutzen?

Vielen Dank.

Antworten:

12 für die Antwort № 1

Das *_s() Funktionen sind nicht Teil des C-Standards, aberEs gibt einen ausstehenden "Technischen Bericht", in dem vorgeschlagen wird, dass sie hinzugefügt werden (ich bin mir nicht sicher, ob die Routinen in der TR genau mit denen von Microsoft identisch sind oder ob sie "nur" ähnlich sind).

TR 24731-1: Erweiterungen der C-Bibliothek Teil I: Schnittstellen zur Überprüfung von Grenzen:

Wenn Sie die alten Funktionen weiterhin verwenden möchten, können Sie die Verwarnungswarnungen ruhig halten, indem Sie das Makro definieren _CRT_SECURE_NO_WARNINGS (war _CRT_SECURE_NO_DEPRECATE welches möglicherweise noch unterstützt wird).


1 für die Antwort № 2

Sie haben Ihre IDE aktualisiert und auch Ihr Upgrade durchgeführtMicrosoft-Bibliotheken. Ehrlich gesagt, können Sie Ihre alten Bibliotheken weiterhin verwenden, wenn sie weiterhin verwendet werden (aus Gründen der Abwärtskompatibilität), obwohl Microsoft gesagt hat, dass sie tatsächlich damit beginnen werden, einige dieser älteren Funktionen zu entfernen. Ich würde sagen, wenn Sie sich vorwärts entwickeln, dann können Sie die neueren Funktionen verwenden. Wenn Sie sich rückwärts entwickeln (oder sich nicht sorgen, was die Version ist), dann sollten Sie die älteren Funktionen verwenden.


1 für die Antwort № 3

Wenn Sie auf die Microsoft-Plattform abzielen, verwenden Sie sie auf jeden Fall. Selbst wenn dies nicht der Fall ist, können Sie sie immer selbst implementieren, wenn (oder falls) Sie Ihre Software auf eine Nicht-Microsoft-Plattform portieren müssen.

Worst Case ist, dass Sie am Ende einige verwenden #ifdefs zur bedingten Kompilierung.


1 für die Antwort № 4

Sie werden für die Standardisierung in Betracht gezogen, soweit ich das beurteilen kann. Der Vorschlag ist TR 24731.

Ob es eine gute Idee ist, sie zu benutzen, habe ichSag ja. Ich mag die Art, wie sie Fehler entdecken, nicht sehr, aber ich glaube, dass Sie sie mit Ihrem eigenen Handler versehen können. Wenn Sie plattformübergreifende Kompatibilität benötigen, haben Sie zwei Möglichkeiten: Implementieren Sie sie mit Makros auf Nicht-Windows-Plattformen oder deaktivieren Sie die Veraltetheit Warnungen.

Nach einer Überprüfung durch eine große Codebasis Ifestgestellt, dass es nahezu unmöglich ist, alle Programmierer dazu zu bringen, die C-Standard-Bibliotheksfunktionen für die String-Manipulation korrekt zu verwenden, so dass alles, was darauf abzielt, dies zu korrigieren, eine willkommene Ergänzung ist.


1 für die Antwort № 5

Sie sollten die Standardfunktionen verwenden und deaktivierenWie auch immer sadistische Warnungen Microsoft hat standardmäßig aktiviert, um Sie davon abzuhalten, standardkonformen Code zu schreiben. Ich bezweifle ernsthaft, dass die "_s-Funktionen" jemals dem Standard C hinzugefügt werden (obwohl sie vorgeschlagen wurden), da sie eine Erfindung eines einzelnen Anbieters sind und niemals von irgendeinem anderen Anbieter implementiert wurden. (Hey, lass uns alle POSIX in den C Standard integrieren, während wir gerade dabei sind ...)


Speisekarte