C++ ## 宏不起作用

C++ ## macro doesn't work

本文关键字:不起作用 C++      更新时间:2023-10-16

带有##的宏会将两个元素连接在一起,例如,如果您使用#define sptember oct ## ober,您将获得october

所以我的问题是:我有一个这样的宏#define getRegByPin(pin) set ## pin比我从 1 到 19 的一些定义是这样的:#define set0 xxx#define set1 xxx等。

但是当我在代码中调用我的宏时 int p = getPinNo(pin); st(getRegByPin(p), p, to);,它将getRegByPin(p)替换为setp而不是set0set13等。

我能做什么?

谢谢你的帮助!你真棒!:)

C 预处理器(C++刚刚继承了它(,只是进行文本替换。 它对变量一无所知。 所以给定

#define getRegByPin(pin) set ## pin
const int p = 5;
getRegByPin(p);  // Will expand to setp, not set5

从语法来看,我猜set0set13是常量。 他们有可以计算的值吗? 例如:

auto getRegByPin(int pin) { return set0+pin; }  // or (set0 << pin)

如果没有,您将需要一个可以索引的常量数组:

auto getRegByPin(int pin) {
    static const setType_t pins[16] = { set0, set1, set2 ... set15};
    return pins[pin];
}

如果它们不是常量,而是函数,则数组需要是函数指针数组。

更喜欢使用函数而不是预处理器。