gpt4 book ai didi

c++ - C++11 中的 exec 缺少 "missing sentinel"警告

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:53:10 26 4
gpt4 key购买 nike

如果您忘记在对 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 中不可用?有什么办法可以恢复吗?

最佳答案

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

关于c++ - C++11 中的 exec 缺少 "missing sentinel"警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25530139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com