Warum werden sowohl "std :: printf" als auch "printf" kompiliert, wenn <cstdio> anstelle von <stdio.h> in C ++ verwendet wird? [Duplikat
Diese Frage hat hier bereits eine Antwort:
Wenn wir C-Header in C ++ verwenden, sollten wir Funktionen aus std :: oder dem globalen Namespace verwenden? 8 answers Meines Wissens nach Kopfzeilen des Formularscxyz
sind identisch mitxyz.h
mit dem einzigen Unterschied, dasscxyz
platziert den gesamten Inhalt vonxyz.h
unter dem Namespacestd
. Warum kompilieren die folgenden Programme sowohl auf GCC 4.9 als auch auf Clang 6.0?
#include <cstdio>
int main() {
printf("Testing...");
return 0;
}
und das zweite Programm:
#include <cstdio>
int main() {
std::printf("Testing...");
return 0;
}
Das gleiche gilt für die FILE-Struktur:
FILE* test = fopen("test.txt", "w");
un
std::FILE* test = std::fopen("test.txt", "w");
beide arbeiten
Up bis jetzt dachte ich immer, dass es besser ist, @ zu verwendcstdio
, cstring
, etc, anstatt ihre nicht namengebundenen Gegenstücke. Welche der beiden folgenden Programme sind jedoch besser geeignet?
Das gleiche gilt für andere C-Funktionen wie memset (von cstring), scanf (auch von cstdio) usw.
(Ich weiß, dass einige Leute fragen werden, warum ich C IO in einem C ++ - Programm verwende. Das Problem hier ist nicht spezifisch C IO, aber ob dieser Code kompiliert werden sollte oder nicht, ohne spezifisch @ anzugebestd::
vor dem Aufruf einer C-Funktion mit Namensraum.)