2010-11-11 101 views
2

標題中的錯誤出現在'#define'行上,這個頭文件中的每一個函數式的宏(從第45行開始)。 ?做錯事「error:expected identifier or'('before numeric identifier」 - ?

#ifndef ASSEMBLER_H 
#define ASSEMBLER_H 


/* Ports */ 
#define Input 0 
#define Output 15 

/* Registers */ 
#define Z 0 
#define A 1 
#define B 2 
#define C 3 
#define D 4 
#define E 5 
#define F 6 
#define G 7 

/* OP Codes */ 
    /*-----Control--------*/ 
#define HLT_OP 0 
#define JMP_OP 1 
#define CJMP_OP 2 
#define OJMP_OP 3 
    /*-----Load/Store-----*/ 
#define LOAD_OP 4 
#define STORE_OP 5 
#define LOADI_OP 6 
#define NOP_OP 7 
    /*-----Math-----------*/ 
#define ADD_OP 8 
#define SUB_OP 9 
    /*-----Device I/O-----*/ 
#define IN_OP  10 
#define OUT_OP 11 
    /*-----Comparison-----*/ 
#define EQU_OP 12 
#define LT_OP  13 
#define LTE_OP 14 
#define NOT_OP 15 

/* Macros */ 
    /*-----Control--------*/ 
#define HLT() 
    (HLT_OP << 28) 
#define JMP(address) 
    ((JMP_OP << 28) | (address)) 
#define CJMP(address) 
    ((CJMP_OP << 28) | (address)) 
#define OJMP(address) 
    ((OJMP_OP << 28) | (address)) 
    /*-----Load/Store-----*/ 
#define LOAD(dest, value) 
    ((LOAD_OP << 28) | ((dest) << 24) | (value)) 
#define STORE(dest, value) 
    ((STORE_OP << 28) | ((dest) << 24) | (value)) 
#define LOADI(dest, value) 
    ((LOADI_OP << 28) | ((dest) << 24) | (value)) 
#define NOP() 
    (NOP_OP << 28) 
    /*-----Math-----------*/ 
#define ADD(dest, op1, op2) 
    ((ADD_OP << 28) | ((dest) << 24) | ((op1) << 20) | ((op2) << 16)) 
#define SUB(dest, op1, op2) 
    ((SUB_OP << 28) | ((dest) << 24) | ((op1) << 20) | ((op2) << 16)) 
    /*-----Device I/O-----*/ 
#define IN(reg) 
    ((IN_OP << 28) | ((reg) << 24) | (Input)) 
#define OUT(reg) 
    ((OUT_OP << 28) | ((reg) << 24) | (Output)) 
    /*-----Comparison-----*/ 
#define EQU(reg1, reg2) 
    ((EQU_OP << 28) | ((reg1) << 24) | ((reg2) << 20)) 
# define LT(reg1, reg2) 
    ((LT_OP << 28) | ((reg1) << 24) | ((reg2) << 20)) 
#define LTE(reg1, reg2) 
    ((LTE_OP << 28) | ((reg1) << 24) | ((reg2) << 20)) 
#define NOT() 
    (NOT_OP << 28) 



#endif 

回答

11

預處理指令(如#define)由一個換行符終止,所以它只能是一個線長如果你想多行宏定義,你需要逃脫換行符:

//     v Make this the last character on the line 
#define NOT()  \ 
    (NOT_OP << 28) 
+0

哦,呵呵。謝謝。 – 2010-11-11 23:25:06

6

宏應寫在1行,不2.

這是錯誤的:

#define NOT() 
    (NOT_OP << 28) 

這是正確的:

#define NOT() (NOT_OP << 28) 

如果你真的想將它寫在多行,使用反斜槓「逃離」新線。像這樣:

#define NOT() \ 
    (NOT_OP << 28) 
2

嗯...我想你沒有把爲#define的subsitution在不同的線路,對不對?

#define JMP(address) 
((JMP_OP << 28) | (address)) 

應該是

#define JMP(address) ((JMP_OP << 28) | (address)) 

代替,例如。 #define聲明必須只在一行中,或者在行尾使用\以擴展到下一行。

相關問題