Lor*_*one 4 c++ unix gcc g++ exec
这个简单的代码段使用g ++ 4.7.0生成"函数调用中缺少的标记"警告,如果编译为Cand C++源代码,则都会生成.我认为这是编译器的错误,因为最终NULL值存在.
#include <unistd.h>
int main() {
execlp("mkdir", "mkdir", "-p", "test", NULL);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我对吗?
不你错了.
在C++中,NULL类似于0或者在C中0L可能是相同的.如果该常量的类型小于指针,则将其传递给可变参数函数是不安全的,因为高位将填充垃圾.
在Linux上,execlp(1)手册页说:
参数列表必须由NULL指针终止,并且由于这些是可变参数函数,因此必须强制转换此指针
(char *) NULL.
即为了便携地提供你需要做的哨兵:
execlp("mkdir", "mkdir", "-p", "test", (char*)NULL);
Run Code Online (Sandbox Code Playgroud)
这就是海湾合作委员会警告你的事情.
| 归档时间: |
|
| 查看次数: |
3250 次 |
| 最近记录: |