这是我正在尝试做的过度简化的版本:
#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");
要将定义转换为适当的字符串,请在宏中使用井号(#)或跳过整个过程,并将引号包括在定义本身中。