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

我试过了:

#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));


但我只有得到

"COMPILETIME/file"


作为输出。

最佳答案

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

#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));
                      ^^^^

关于c++ - 如何将在宏中#define的值转换为char *(C++),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31599000/

10-16 04:57