簡體   English   中英

C ++ ##宏不起作用

[英]C++ ## macro doesn't work

具有##的宏會將兩個元素連接在一起,例如,如果您使用#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);調用宏時, int p = getPinNo(pin); st(getRegByPin(p), p, to); 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];
}

如果它們不是常量而是函數,則您的數組將需要是一個函數指針數組。

比預處理器更喜歡使用功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM