c++ - 虚假 "missing sentinel in function call"

标签 c++ unix gcc g++ exec

如果编译为 Cand C++ 源代码,这个简单的代码片段会使用 g++ 4.7.0 生成“函数调用中缺少标记”警告。我相信这是编译器的错误,因为最终的 NULL值(value)就在那里。

#include <unistd.h>

int main() {
    execlp("mkdir", "mkdir", "-p", "test", NULL);
    return 0;
}

我说得对吗?

最佳答案

不,你错了。

在 C++ 中 NULL 类似于 00L 并且在 C 中可能是相同的。如果该常量的类型小于指针那么它是不安全的将其传递给可变参数函数,因为高位将被垃圾填满。

在 Linux 上,execlp(1) 手册页说:

The list of arguments must be terminated by a NULL pointer, and, since these are variadic functions, this pointer must be cast (char *) NULL.

即可移植地提供你需要做的哨兵:

    execlp("mkdir", "mkdir", "-p", "test", (char*)NULL);

这就是 GCC 警告您的内容。

关于c++ - 虚假 "missing sentinel in function call",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12095865/

相关文章:

gcc - #pragma comment(lib, "xxx.lib") 在 Linux 下等效吗?

c++ - SFINAE:当重载移动到其他 namespace 时,检查函数是否存在中断

unix - FIFO 是否保留消息边界?

C++ Winsock 接受内存泄漏/资源泄漏

php - 如何在 Unix/Linux 中为文件夹中的所有文件添加 .xml 扩展名

c - 如何在 C 中调试不干净的套接字关闭?

gcc - 了解堆栈对齐强制

c - PIC(位置无关代码)

c++ - 在 C++ 中的两个进程之间拥有无限对象队列的最佳方法

c++ - 我的 SetupDiEnumDeviceInterfaces 不工作