我遇到了一個問題,我需要能夠通過宏修改C函數調用。帶宏的前綴函數調用
的基本結構是這樣的:
#define foo bar
foo_1(x);
foo_2(x);
foo_3(x);
我要的是
bar_1(x);
bar_2(x);
bar_3(x);
被調用,但是字符串宏似乎並沒有更換電話的前綴部分。
有人能指出我正確的方向嗎?
我遇到了一個問題,我需要能夠通過宏修改C函數調用。帶宏的前綴函數調用
的基本結構是這樣的:
#define foo bar
foo_1(x);
foo_2(x);
foo_3(x);
我要的是
bar_1(x);
bar_2(x);
bar_3(x);
被調用,但是字符串宏似乎並沒有更換電話的前綴部分。
有人能指出我正確的方向嗎?
宏只適用於全令牌(感謝上帝 - 他們夠糟糕的是)。換句話說,#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);
即將指出舊代碼無效,但您修復了它。 –
謝謝,但代碼太廣泛,以便像這樣的調用包裝所有東西。希望這將是一個快速解決方案,看起來我只是跳到fina解決方案。 – xceph
那麼,預處理器的工作標記,而不是文本片段。 'foo_1'是一個單一的標記。 –
這會解釋它!以爲這是一個發現/替換的例子。謝謝。 – xceph