代码之家  ›  专栏  ›  技术社区  ›  adrianmcmenamin

将stdout分配给FILE*

  •  4
  • adrianmcmenamin  · 技术社区  · 10 年前

    作为一个小型C程序中具有全局范围的代码,我有:

    FILE *outFile = stdout;
    

    这是因为我想 stdout 作为输出的默认目的地,但允许用户在命令行上指定不同的目的地(尽管我知道他们可以重定向我想要的皮带和支架)。

    无法编译:

    xmlheap.c:15:17: error: initializer element is not a compile-time constant
    FILE *outFile = stdout;
                ^~~~~~
    /usr/include/stdio.h:215:16: note: expanded from macro 'stdout'
    #define stdout  __stdoutp
    

    这是不可能的吗?

    2 回复  |  直到 10 年前
        1
  •  6
  •   Kerrek SB    10 年前

    C中的静态初始化器必须是编译时常数。自从 stdout 不需要这样,您必须在动态程序执行中初始化全局变量:

    #include <stdio.h>
    
    FILE * outFile;
    
    int main(void)
    {
        outFile = stdout;
    
        /* ... */
    }
    

    (具体而言(参见C11 7.21.1/3), 标准输出 mereley是否被指定为一个宏,该宏扩展为指向 FILE "".)

        2
  •  -1
  •   konsolebox    10 年前

    使用 fdopen :

       FILE *outFile = fdopen(1, "w");