在.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/