说我有像
这样的功能void printToSomewhere(FILE* stream, char* msg){
fprintf(stream, "%s", msg);
}
如果我希望流为stdout
,我是否必须在调用函数之前声明:
...
FILE* stdout;
printToSomewhere(stdout, "printing to stdout");
...
或者我可以在不必明确定义/ include / etc标准输出的情况下调用该函数吗?
...
printToSomewhere(stdout, "printing to stdout");
...
答案 0 :(得分:4)
与每个变量一样,您必须在使用之前声明stdout
。变量stdout
在头文件stdio.h
(或C ++中的cstdio
)中声明。通过加入stdio.h
(或cstdio
),stdout
变为可见。
在许多平台上,您还可以简单地将stdout
声明为外部变量:
extern FILE *stdout;
虽然不鼓励这样做,因为C标准要求stdout
成为宏并允许它扩展为甚至不是变量的东西。但是,在大多数平台上,stdio.h
将此宏定义为
#define stdout stdout
但你应该避免在便携式软件中做出这个假设。
答案 1 :(得分:0)
是。 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