如何将宏中的#define'd转换为char *(c ++)

时间:2015-07-23 22:14:59

标签: c++ macros directory

在.cpp中,我想将文件输出到在编译时创建的目录(由编译时确定)。我在makefile中通过-DCOMPILETIME = $(关于时间的东西)传递了这个值。我想将存储在COMPILETIME中的值传递给sprintf,这样我就可以创建一个文件路径字符串,最终用于放置我的输出文件。

我试过了:

MoveNext

以及

#define str(x) #x
sprintf(filepath,"\"%s\file\"",str(COMPILETIME));

但我只得到

#define str(x) #x
#define strname(name) str(name)
sprintf(filepath,"\"%s\file\"",strname(COMPILETIME));

作为输出。

1 个答案:

答案 0 :(得分:2)

你的宏很好。这是一个测试程序:

#include <stdio.h>

#define str(x) #x
#define strname(name) str(name)

int main()
{
   printf("\"%s/file\"\n",strname(COMPILETIME));
   return 0;
}

构建命令:

cc -Wall -o soc soc.c

输出:

"COMPILETIME/file"

构建命令:

cc -Wall -o soc soc.c -DCOMPILETIME=abcd

输出:

"abcd/file"

在gcc 4.9.2。

下测试

fopen面临的问题可能与:

有关
sprintf(filepath,"\"%s\file\"",strname(COMPILETIME));
                      ^^^^

制作

sprintf(filepath,"\"%s\\file\"",strname(COMPILETIME));
                      ^^^^

否则,你正在逃避角色f,它什么都不做。您还应该能够使用正斜杠而不是反斜杠。

sprintf(filepath,"\"%s/file\"",strname(COMPILETIME));
                      ^^^^