缺少C ++ 11中exec的“缺少哨兵”警告

时间:2014-08-27 14:40:23

标签: c++ gcc c++11 compiler-warnings

如果您在调用其中一个exec(3)函数时忘记包含NULL标记,GCC将会提醒您:

#include <unistd.h>
int main(int argc, char **argv)
{
  execlp("test", "test", "arg1");
}

GCC 4.8的示例编译器输出:

$ g++ test.cc -Wformat
test.cc: In function ‘int main(int, char**)’:
test.cc:4:32: warning: missing sentinel in function call [-Wformat=]
   execlp("test", "test", "arg1");
                            ^
$

但是,如果在C ++ 11模式下编译,则不会打印诊断信息:

$ g++ test.cc -std=c++11 -Wformat
$

为什么C ++ 11中没有此警告?有没有办法让它回来?

1 个答案:

答案 0 :(得分:4)

execlp不是标准的C函数。让编译器将其识别为&#34;标准&#34;函数,它知道参数应该是什么样的,你需要-std=gnu++11而不是-std=c++11。请注意,默认值为-std=gnu++98。 Glibc可以通过在sentinel声明中指定execlp属性来改善这种情况。

相关问题