这是我正在尝试做的过度简化的版本:

#define LOGDIRECTORY C:\\logs\\
system("mkdir LOGDIRECTORY");

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

我知道这是错误的,必须使用"标记或其他字符来指定我想要的内容,但我无法弄清楚。我不想对目录和文件名进行硬编码,因为将来有人可能要更改它们,并且更改定义比整个函数等要容易得多。

PS,我正在用普通 C 对此进行编码。

最佳答案

#define LOGDIRECTORY C:\\logs\\
#define DEF2STR(x) #x
system("mkdir " DEF2STR(LOGDIRECTORY));
#define LOGDIRECTORY_WITH_QUOTES "C:\\logs\\"
system("mkdir " LOGDIRECTORY_WITH_QUOTES);

在C语言中,您可以通过编写两个字符串文字(中间没有运算符)来进行简单的字符串连接。 "A" "B"将在编译时转换为"AB"。您也可以使用它来将长字符串拆分为多行。
printf("a very long "
"string indeed");

要将定义转换为适当的字符串,请在宏中使用井号(#)或跳过整个过程,并将引号包括在定义本身中。

10-06 01:53