C++ 如何使用c/c++;宏参数
我正在努力做到这一点: char*fname=“results5.txt” 使用如下宏:C++ 如何使用c/c++;宏参数,c++,c,c-preprocessor,C++,C,C Preprocessor,我正在努力做到这一点: char*fname=“results5.txt” 使用如下宏: #define FILENAME(NUM) "results" NUM ".txt" int number = 5; char * fname = FILENAME(number); 这样做有可能吗?发生了什么? 谢谢。C 因为您标记了C并希望使用基于宏的解决方案,所以请在宏中使用# #define FILENAME(NUM) "results"#NUM".txt"
#define FILENAME(NUM) "results" NUM ".txt"
int number = 5;
char * fname = FILENAME(number);
这样做有可能吗?发生了什么?
谢谢。C
因为您标记了C并希望使用基于宏的解决方案,所以请在宏中使用#
#define FILENAME(NUM) "results"#NUM".txt"
^^^^^
char *fname = FILENAME(5);
注意,这样就不能使用变量
int number = 5;
char *fname = FILENAME(number); // IMPOSSIBLE
否则,要使用变量,应该使用函数
C++ 让一切变得更容易
std::string FileName(int d)
{
return "results"+ std::to_string(d) +".txt";
// or...
// std::ostringstream str;
// str << "results" << d << ".txt";
// return str.str();
}
...
int number = 5;
std::string filename = FileName(number);
std::字符串文件名(int d)
{
返回“results”+std::to_字符串(d)+“.txt”;
//或者。。。
//std::ostringstream str;
//str#包括
#包括
整数=5;
std::stringstream-ss;
ss您已将问题标记为C
和C++
。对于C++
部分,最简单的是:
inline std::string FILENAME(int number) {
std::ostringstream s;
s << "results" << number << ".txt";
return s.str();
}
int number = 5;
std::string fname = FILENAME(number);
内联标准::字符串文件名(整数){
std::ostringstream s;
s如果你想要results5.txt
,恐怕预处理器不会救你。关于什么问题?查找“C程序是如何编译的”,密切关注预处理阶段。@duDE我想你需要一个char文件名[PATH\u MAX]
和一个sprintf()
调用您试图满足的基本需求。为什么不能在运行时使用函数?如果您想在编译时更改此类信息,可以使用-D传递一个值。g++…-DFILENAME=“results5.txt”char*fname=FILENAME;
inline std::string FILENAME(int number) {
std::ostringstream s;
s << "results" << number << ".txt";
return s.str();
}
int number = 5;
std::string fname = FILENAME(number);