stdout是C++中本机可用的令牌吗



假设我有一个类似的函数

void printToSomewhere(FILE* stream, char* msg){
    fprintf(stream, "%s", msg);
}

如果我希望流是stdout,我必须在调用函数之前声明吗

...
FILE* stdout;
printToSomewhere(stdout, "printing to stdout");
...

或者我可以在不必显式定义/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, "Hellon");
    fclose(f);
    return 0;
}

预期输出:

Hello

相关内容

  • 没有找到相关文章

最新更新