stdout 是 C++ 中本机可用的标记吗?
Is stdout a natively usable token in C++?
假设我有一个类似
的函数
void printToSomewhere(FILE* stream, char* msg){
fprintf(stream, "%s", msg);
}
如果我希望流成为 stdout
,我是否必须在调用函数之前声明:
...
FILE* stdout;
printToSomewhere(stdout, "printing to stdout");
...
或者我可以调用该函数而不必显式 define/include/etc stdout 吗?
...
printToSomewhere(stdout, "printing to stdout");
...
与每个变量一样,您必须在使用前声明 stdout
。变量 stdout
在头文件 stdio.h
(或 C++ 中的 cstdio
)中声明。通过包含 stdio.h
(或 cstdio
),stdout
变得可见。
在许多平台上,您也可以简单地将stdout
声明为外部变量:
extern FILE *stdout;
虽然不鼓励这样做,因为 C 标准要求 stdout
是一个宏,并允许它扩展到甚至不是变量的东西。然而,在大多数平台上,stdio.h
将此宏定义为
#define stdout stdout
但是您应该避免在便携式软件中做出这种假设。
是的。 STDOUT 始终是文件描述符 1(由 POSIX 强制)。
这会起作用:
#include <stdio.h>
#include <stdlib.h>
void printToSomewhere(FILE* stream, const char* msg){
fprintf(stream, "%s", msg);
}
int main()
{
FILE* f = fdopen(1, "w+");
printToSomewhere(f, "Hello\n");
fclose(f);
return 0;
}
预期输出:
Hello
假设我有一个类似
的函数void printToSomewhere(FILE* stream, char* msg){
fprintf(stream, "%s", msg);
}
如果我希望流成为 stdout
,我是否必须在调用函数之前声明:
...
FILE* stdout;
printToSomewhere(stdout, "printing to stdout");
...
或者我可以调用该函数而不必显式 define/include/etc stdout 吗?
...
printToSomewhere(stdout, "printing to stdout");
...
与每个变量一样,您必须在使用前声明 stdout
。变量 stdout
在头文件 stdio.h
(或 C++ 中的 cstdio
)中声明。通过包含 stdio.h
(或 cstdio
),stdout
变得可见。
在许多平台上,您也可以简单地将stdout
声明为外部变量:
extern FILE *stdout;
虽然不鼓励这样做,因为 C 标准要求 stdout
是一个宏,并允许它扩展到甚至不是变量的东西。然而,在大多数平台上,stdio.h
将此宏定义为
#define stdout stdout
但是您应该避免在便携式软件中做出这种假设。
是的。 STDOUT 始终是文件描述符 1(由 POSIX 强制)。
这会起作用:
#include <stdio.h>
#include <stdlib.h>
void printToSomewhere(FILE* stream, const char* msg){
fprintf(stream, "%s", msg);
}
int main()
{
FILE* f = fdopen(1, "w+");
printToSomewhere(f, "Hello\n");
fclose(f);
return 0;
}
预期输出:
Hello