Por que “std :: printf” e “printf” são compilados quando se usa <cstdio> em vez de <stdio.h> em C ++? [duplicado
Esta pergunta já tem uma resposta aqui:
Ao usar cabeçalhos C em C ++, devemos usar funções de std :: ou o namespace globa 8 respostasPara meu conhecimento, cabeçalhos do formuláriocxyz
são idênticos axyz.h
com a única diferença de quecxyz
coloca todo o conteúdo dexyz.h
sob o namespacestd
. Por que os programas a seguir são compilados no GCC 4.9 e no clang 6.0?
#include <cstdio>
int main() {
printf("Testing...");
return 0;
}
e o segundo programa:
#include <cstdio>
int main() {
std::printf("Testing...");
return 0;
}
O mesmo vale para a estrutura FILE:
FILE* test = fopen("test.txt", "w");
std::FILE* test = std::fopen("test.txt", "w");
ambos os trabalho
Até agora, eu sempre pensei que era melhor usarcstdio
, cstring
, etc, em vez de suas contrapartes sem espaço para nome. No entanto, qual dos dois programas a seguir acima é uma prática recomendada?
mesmo vale para outras funções C, como memset (do cstring), scanf (também do cstdio) et
(Eu sei que algumas pessoas perguntam por que estou usando C IO em um programa C ++; o problema aqui não é especificamente C IO, mas se esse código deve ou não ser compilado sem especificar especificamentestd::
antes de chamar uma função C com espaço para nome