微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我怎样才能将一个#definedstring插入到system命令中? win32中

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

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

然而,预处理器,而不是交换出定义的名称不是。 相反,系统命令实际上认为LOGDIRECTORY是名称,因此在启动程序时向我发送错误

我知道这是错误的,必须有一些我可以用"标记或其他字符来指定我想要的东西,但我无法弄清楚,我不想硬编码目录和文件名,因为有人可能想在将来改变它们,改变一个定义比整个function要容易得多。

PS,我用普通的C编码。

为什么“杀-15”有时失败?

将主显示器全屏显示在另一台显示器上

线程 – 访问资源避免饥饿

在WPF中使用Windows资源pipe理器上下文菜单

打开一个Windows文件目录在c中读/写

LINQ to sql – FROM X WHERE X =“1”SELECT Y

在不同域中的远程计算机上启动Windows服务

listen()忽略积压参数?

访问站点时Windowslogin提示

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] 举报,一经查实,本站将立刻删除。

相关推荐