wzy20210414 2022-02-02 19:56 采纳率: 100%
浏览 12
已结题

用编译运算符##创造被调函数名,调用函数。

用编译运算符##创造被调函数名,调用函数。

我希望用变量代替被调函数test3()中的3.

我的解答思路和尝试过的方法
#include <iostream>
using namespace std;

//用字面值3可正常工作。
#define FUN(n) test##n();   //宏定义

int FUN(3)   //函数声明语句,宏展开即:test3();

int main()
{
    FUN(3);  //调用指定函数test3()
    return 0;
}
int test3()
{
    cout << "test3 printed,ok!" << endl;
    return 0;
}

我希望用变量代替test3中的3.
下面是我对两次尝试,均未成功。恳求指导。谢谢!

//尝试一:试图用常变量代替3。失败
#define FUN(n) test##n();   //宏定义

constexpr int i = 3;
int FUN(i)   //函数声明语句,宏展开为:testi();  i 未被转化为3

int main()
{
    FUN(i);  //拟调用指定函数test3(),失败
    return 0;
}

//尝试二:试图用宏定义代替3。失败
#define FUN(n) test##n();   //宏定义
#define i 3;

int FUN(i)   //函数声明语句,i虽然展开为3,但仍报错。好像仍展开为:testi();  

int main()
{
    FUN(i);  //拟调用指定函数test3(),失败
    return 0;
}


int test3()
{
    cout << "test3 printed,ok!" << endl;
    return 0;
}
我想要达到的结果

我希望用变量代替test3中的3.

  • 写回答

1条回答 默认 最新

  • _GX_ 2022-02-02 20:11
    关注

    你需要再加一层宏展开

    #include <iostream>
    
    #define i 3
    #define FUN1(n) test##n()
    #define FUN(n) FUN1(n)
    
    int FUN(i);
    
    using namespace std;
    
    int main()
    {
        FUN(i);
        return 0;
    }
    
    int test3()
    {
        cout << "test3 printed,ok!" << endl;
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月10日
  • 已采纳回答 2月2日
  • 创建了问题 2月2日