Почему компиляция «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 в пространстве имен.)

Ответы на вопрос(1)

Ваш ответ на вопрос