Почему компиляция «std :: printf» и «printf» выполняется при использовании <cstdio>, а не <stdio.h> в C ++? [Дубликат]
На этот вопрос уже есть ответ:
При использовании заголовков C в C ++, должны ли мы использовать функции из std :: или глобального пространства имен? 8 ответов Насколько мне известно, заголовки видаcxyz
идентичныxyz.h
с той лишь разницей, чтоcxyz
помещает все содержимоеxyz.h
под пространством именstd
. Почему следующие программы компилируются на GCC 4.9 и clang 6.0?
#include <cstdio>
int main() {
printf("Testing...");
return 0;
}
и вторая программа:
#include <cstdio>
int main() {
std::printf("Testing...");
return 0;
}
То же самое касается структуры FILE:
FILE* test = fopen("test.txt", "w");
а такж
std::FILE* test = std::fopen("test.txt", "w");
как работа.
До сих пор я всегда думал, что лучше использоватьcstdio
, cstring
и т. д., а не их коллеги без пространства имен. Тем не менее, какие из следующих двух программ выше, лучш
То же самое относится и к другим функциям C, таким как memset (из cstring), scanf (также из cstdio) и т. Д.
(Я знаю, что некоторые люди спросят, почему я использую C IO в программе на C ++; проблема здесь не в C C, а в том, должен ли этот код компилироваться без указанияstd::
перед вызовом функции C в пространстве имен.)