簡體   English   中英

帶宏的函數調用前綴

[英]Prefixing function calls with macros

我遇到了一個問題,我需要能夠通過宏修改C函數調用。

基本結構如下:

#define foo bar
foo_1(x);
foo_2(x);
foo_3(x);

我想要的是

bar_1(x);
bar_2(x);
bar_3(x);

被調用,但是字符串宏似乎並不能代替調用的前綴部分。

有人可以指出我正確的方向嗎?

宏僅適用於完整的令牌(感謝上帝-它們已經足夠糟糕了)。 換句話說, foo_1 #define foo bar僅影響標識的foo ,而不影響標識符foo_1 ,因為這不是同一標記。

如果您不能修改調用代碼,則無法實現所需的代碼。 使用文本編輯器的搜索和替換等方法。

如果您真正想要的是可以根據需要調整為不同名稱前綴的函數調用代碼片段,則可以這樣編寫:

foo(1)(x);
foo(2)(x);
foo(3)(x);

在添加此代碼段之前,您需要定義以下內容:

#define foo(i) bar_ ## i

使用字符串串聯

➤ cat try.h
#define mymacro(msv) bar_##msv
mymacro(1)(x);
➤ gcc -E try.h
# 1 "try.h"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "try.h"

bar_1(x);

暫無
暫無

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

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