gpt4 book ai didi

C++ ## 宏不起作用

转载 作者:行者123 更新时间:2023-11-28 05:54:41 24 4
gpt4 key购买 nike

带有 ## 的宏会将两个元素连接在一起,例如,如果您使用 #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是常量。他们有你可以计算的值(value)吗?例如:

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];
}

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

比预处理器更喜欢使用函数。

关于C++ ## 宏不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34452129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com