小编Jon*_*yer的帖子

为什么argv参数execvp不是const?

因此定义了execvp:

int execvp(const char *file, char *const argv[]);
Run Code Online (Sandbox Code Playgroud)

这使得这样的代码无法使用:

const char* argv[] = {"/bin/my", "command", "here", NULL};
execvp(argv[0], argv);
Run Code Online (Sandbox Code Playgroud)

这是意外遗漏吗?围绕这个const_cast是否安全?或者做一些execvp实现实际上是在那个内存上乱写?

c libc execvp

26
推荐指数
1
解决办法
1838
查看次数

我可以将长#include指令拆分为两行吗?

我希望有一种方法可以将#include指令分成两行,这样我的代码就可以符合每行80个字符,尽管需要很长的包含路径.

除了扩展编译器的搜索路径之外,我该如何管理呢?有没有办法将我的长路径字符串分成两行?

"#define"宏扩展显然发生在#include扩展之后,所以这些不起作用:

#define BIGPATH "..."
#include BIGPATH ## "/foo.c"
#include "BIGPATH/foo.c"
#include BIGPATH"/foo.c"
Run Code Online (Sandbox Code Playgroud)

我也试过了

#include "foo" ##
         "bar"
Run Code Online (Sandbox Code Playgroud)

#include "foo" \
         "bar"
Run Code Online (Sandbox Code Playgroud)

无济于事.也许我想要的是不可能的?帮助我,stackoverflow kenobi,你是我唯一的希望.

答案:建立在下面的建议答案上,这是实际对我有用的:

#define STRINGIFY(x) #x
#define PATH(path) STRINGIFY(/my/very/long/path)
#include PATH(foo.h)
#undef PATH
#undef STRINGIFY
Run Code Online (Sandbox Code Playgroud)

c include stringification c-preprocessor

20
推荐指数
2
解决办法
1836
查看次数

标签 统计

c ×2

c-preprocessor ×1

execvp ×1

include ×1

libc ×1

stringification ×1