c++之C 预处理器之现有定义的前置路径
wayfarer
阅读:21
2025-02-15 21:57:57
评论:0
这个问题在这里已经有了答案:
Can I append to a preprocessor macro?
(3 个回答)
去年关闭。
假设我有一个来自 gcc -D 选项的定义,例如
gcc -DBINDIR=\"/usr/bin\"
我想要的是在此现有定义之前添加路径,因此 BINDIR 类似于“/home/user/testbuild/usr/bin”
我试过的:
#define STRINGIZE_NX(A) #A
#define STRINGIZE(A) STRINGIZE_NX(A)
#define PRE_PATH "/home/user/testbuild"
#pragma message "PRE_PATH: " STRINGIZE(PRE_PATH)
#ifndef BINDIR
# error "BINDIR must be defined"
#else
# pragma message "BINDIR: " STRINGIZE(BINDIR)
# define TMP BINDIR
# pragma message "TMP: " STRINGIZE(TMP)
# undef BINDIR
# define BINDIR PRE_PATH TMP
# pragma message "BINDIR: " STRINGIZE(BINDIR)
# undef TMP
#endif
在查看编译器输出时,在我看来,TMP 并未按照我预期的方式分配给 BINDIR 的值:
note: #pragma message: PRE_PATH: "/home/user/testbuild"
note: #pragma message: BINDIR: "/usr/bin"
note: #pragma message: TMP: BINDIR
note: #pragma message: "/home/user/testbuild" BINDIR
最后编译器将在定义应该被连接的地方失败:
error: expected ')' before 'TMP'
# define BINDIR PRE_PATH TMP
我究竟做错了什么?
感谢您的每一个帮助!
请您参考如下方法:
我知道这不是你所要求的。但是,与其执行晦涩难懂的预处理器魔术,不如将其放入头文件中,例如:
#undef BIN_DIR
#define BIN_DIR bin_dir
extern char *bin_dir;
和代码文件之一,并在包含上述标题之前:
char *bin_dir = PRE_PATH BIN_DIR;
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。