为什么带有gcc的-std = c11在stdio.h中隐藏popen?

时间:2018-11-10 20:11:25

标签: c popen

我想使用popen。它在stdio.h中。我包括了,但是编译器看不到 -std = c11。无需-std = c11即可编译。

#include <stdio.h>

int main(void)
{
   popen("ls *","r");
}
  

gcc -std = c11 popen_test.c

popen_test.c:在“ main”函数中:
popen_test.c:5:4:警告:函数'popen'的隐式声明[-Wimplicit-function-declaration]

popen("ls *","r");
^~~~~

它被隐藏在stdio.h中,

#ifdef __USE_POSIX2

该手册页说它在以下情况下可用:

  

_POSIX_C_SOURCE> = 2 || / * Glibc版本<= 2.19:* /   _BSD_SOURCE || _SVID_SOURCE

1 个答案:

答案 0 :(得分:1)

<div class="gallery"> <div class="row"> <div class="frame"><img src="https://via.placeholder.com/200x400" alt=""></div> <div class="frame"><img src="https://via.placeholder.com/200x50" alt=""></div> <div class="frame"><img src="https://via.placeholder.com/200x300" alt=""></div> <div class="frame"><img src="https://via.placeholder.com/200x100" alt=""></div> </div> <div class="row"> <div class="frame"><img src="https://via.placeholder.com/400" alt=""></div> <div class="frame"><img src="https://via.placeholder.com/400" alt=""></div> <div class="frame"><img src="https://via.placeholder.com/400x200" alt=""></div> <div class="frame"><img src="https://via.placeholder.com/400x800" alt=""></div> </div> <div class="row"> <div class="frame"><img src="https://via.placeholder.com/500x200" alt=""></div> <div class="frame"><img src="https://via.placeholder.com/500x200" alt=""></div> <div class="frame"><img src="https://via.placeholder.com/500x200" alt=""></div> <div class="frame"><img src="https://via.placeholder.com/500x200" alt=""></div> </div> <div class="row"> <div class="frame"><img src="https://via.placeholder.com/200x200" alt=""></div> <div class="frame"><img src="https://via.placeholder.com/300x400" alt=""></div> <div class="frame"><img src="https://via.placeholder.com/300x200" alt=""></div> <div class="frame"><img src="https://via.placeholder.com/300x100" alt=""></div> </div> <div class="row"> <div class="frame"><img src="https://via.placeholder.com/500x400" alt=""></div> <div class="frame"><img src="https://via.placeholder.com/500x200" alt=""></div> <div class="frame"><img src="https://via.placeholder.com/500x300" alt=""></div> <div class="frame"><img src="https://via.placeholder.com/500x100" alt=""></div> </div> </div>不是C的一部分。要获取它,您需要在添加任何内容之前先使用feature test macro启用它。

最简单的方法是在顶部使用popen(或在编译器调用中使用#define _GNU_SOURCE)。

用-std = c11编译:

-D_GNU_SOURCE