如何将#defined字符串插入system()命令?(win32)中

2 c windows c-preprocessor

这是我想要做的过于简化的版本:

#define LOGDIRECTORY C:\\logs\\
system("mkdir LOGDIRECTORY");
Run Code Online (Sandbox Code Playgroud)

但是,预处理器不是替换掉定义的名称.相反,系统命令实际上认为LOGDIRECTORY是名称,因此在启动程序时会向我发送错误.

我知道这是错的,必须有一些我可以用"标记或其他字符来指定我想要的东西,但我无法弄明白.我不想对目录和文件名进行硬编码,因为有些人可能希望将来更改它们,并且更改定义比整个函数更容易等.

PS,我在简单的C编码.

kic*_*hik 8

#define LOGDIRECTORY C:\\logs\\
#define DEF2STR(x) #x
system("mkdir " DEF2STR(LOGDIRECTORY));
#define LOGDIRECTORY_WITH_QUOTES "C:\\logs\\"
system("mkdir " LOGDIRECTORY_WITH_QUOTES);
Run Code Online (Sandbox Code Playgroud)

在C中,您可以通过编写两个字符串文字来完成简单的字符串连接,其间没有运算符."A" "B""AB"在编译时转换为.您也可以使用它将长字符串拆分为多行.

printf("a very long "
"string indeed");
Run Code Online (Sandbox Code Playgroud)

要将define转换为正确的字符串,请#在宏中使用井号()或跳过整个事物并在define本身中包含引号.