这是我想要做的过于简化的版本:
#define LOGDIRECTORY C:\logs\ system("mkdir LOGDIRECTORY");
然而,预处理器,而不是交换出定义的名称不是。 相反,系统命令实际上认为LOGDIRECTORY是名称,因此在启动程序时向我发送错误。
我知道这是错误的,必须有一些我可以用"标记或其他字符来指定我想要的东西,但我无法弄清楚,我不想硬编码目录和文件名,因为有人可能想在将来改变它们,改变一个定义比整个function要容易得多。
PS,我用普通的C编码。
为什么“杀-15”有时失败?
线程 – 访问资源避免饥饿
在WPF中使用Windows资源pipe理器上下文菜单
LINQ to sql – FROM X WHERE X =“1”SELECT Y
在不同域中的远程计算机上启动Windows服务
listen()忽略积压参数?
C ++ Win32api,创build一个没有资源的对话框
#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");
要将定义转换为适当的字符串,请在宏中使用井号( # )或跳过整个东西,并将引号包含在定义本身中。
如果你正在用GCC编译,你将别无选择,只能用引号包装这个定义,因为最后的尾部反斜杠将被解释为一个续行字符,如果这不会导致错误,倒数第二个反斜杠提出错误。 但是,如果你选择只是去掉尾部的反斜杠,你仍然需要使用两个级别的字符串宏,或者你的syscal是“mkdir LOGDIRECTORY”。 请参阅http://gcc.gnu.org/onlinedocs/cpp/Stringification.html
所以上面的例子会变成:
#define LOGDIRECTORY C:\logs #define DEF2STR(x) #x #define STR(x) DEF2STR(x) system("mkdir " STR(LOGDIRECTORY));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。