stdout是C ++中可以原生使用的令牌吗?

时间:2015-11-12 00:29:31

标签: c++ file stream stdout

说我有像

这样的功能
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");
...

2 个答案:

答案 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