C++ 如何使用c/c++;宏参数

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"

我正在努力做到这一点:

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