你能用C中的宏做这样的事吗?
#define SUPERMACRO(X,Y) #define X Y
then
SUPERMACRO(A,B) expands to #define A B
Run Code Online (Sandbox Code Playgroud)
我有一种感觉不是因为预处理器只进行了一次.
官方gcc唯一.请不要使用第三方工具.
我想做相同的以下内容:
#define print_max(TYPE) \
# ifdef TYPE##_MAX \
printf("%lld\n", TYPE##_MAX); \
# endif
print_max(INT);
Run Code Online (Sandbox Code Playgroud)
现在#ifdef,就我在函数宏中看到的那样,不允许使用任何嵌套的预处理程序指令.有任何想法吗?
更新:所以看起来这是不可能的.即使是在运行时检查的黑客也无法实现.所以我想我会选择以下内容:
#ifndef BLAH_MAX
# define BLAH_MAX 0
#endif
# etc... for each type I'm interested in
#define print_max(TYPE) \
if (TYPE##_MAX) \
printf("%lld\n", TYPE##_MAX);
print_max(INT);
print_max(BLAH);
Run Code Online (Sandbox Code Playgroud) 有没有办法连接2个字符串文字以形成包含路径?
代码存根:
#define INCLUDE_DIR "/include"
#include INCLUDE_DIR "/dummy.h"
Run Code Online (Sandbox Code Playgroud)
看看这个问题,答案指向不同的方向(编译器命令行).它提到这里,这似乎是不可能的,但我不知道是否该主题已经挖够了.
(我确实有一个与此相关的用例,请仅关注此问题的答案/评论.)
我有一组包含在很远的目录中,这意味着包含它们需要很长的包含,例如:
#include "../../Path/to/my/file.h"
Run Code Online (Sandbox Code Playgroud)
在我有多个这样的地方它变得有点不方便所以我想我可以对目录路径使用#define,然后连接我需要的文件名,即
#define DIR "../../Path/to/my/"
#define FILE1 "file.h"
#define FILE2 "anotherFile.h"
#include DIR FILE1 // should end up same as line in first example after pre-proc
Run Code Online (Sandbox Code Playgroud)
然而,这不起作用......无论如何在适合于此的C预处理器的工作中进行连接?