我需要擴大單預處理指令,例如: 具有源文件和兩個頭,我想只有一個define
從一個特定的頭部擴展,使所有其他include
和define
完整。擴展一個C預處理指令
主要思想是,鑑於類似的代碼如下:
的defs.h:
#define FOO(X,op) int X(int a,int b) { return a op b; }
other_file.h:
#define ONE 1
#define TWO 2
#define THREE 3
#define FOUR 4
#define FIVE 5
的main.c:
"file: main.c "
#include <stdio.h>
#include "defs.h"
#include "other_file.h"
FOO(add,+)
FOO(sub,-)
FOO(mul,*)
FOO(div,/)
int main()
{
printf("%d\n",add(ONE,TWO));
printf("%d\n",sub(THREE,FOUR));
printf("%d\n",mul(FIVE,FIVE));
printf("%d\n",div(25,FIVE));
return 0;
}
我會有main.c輸出與包括相同,但將FOO擴展到創建的函數。我知道這個例子很愚蠢,但我打算在更大的代碼數據庫上運行它。
這樣做的動機是在宏中定義的函數中運行cccc。運行它的最簡單方法是展開這些宏。我也歡迎替代方法來做到這一點。
你不能這樣做(除非對源文件進行了大量的預處理)。我會用一個更簡單的正則表達式的方法來做到這一點(只需用你喜歡的腳本語言編寫你自己的預處理器,perl?) –
好吧,我更喜歡python。將「函數」(使用正則表達式)轉換爲臨時文件,運行預處理器並將其放回處理文件的想法太難看了嗎? –
不,沒關係,但我不會覆蓋原始文件。例如,您可以將源文件從.C重命名爲.raw.C,並且您的預處理器可能會讀取所有.raw.C文件以生成純C文件。如果你不得不改變某些東西...... –