2016-01-19 9 views
1

我有值的固定陣列,其必須是像它是因爲它被訪問以,這種方式所使用的通信協議(用於問題不相關),該方式:更好地使用宏定義或指針的數組中的值?

#define REGS_ARRAY_SIZE 256 
int16 Regs[REGS_ARRAY_SIZE]; 

每個值具有一個特定的目的,例如:

Regs[ENABLE_MOTOR_ADDRESS] 

將被用於指示馬達的與0或1

啓用爲了使用更舒適這些樣值必須被從代碼我訪問寫和從外面t hrough通信協議我還以爲我的選擇是:

使用宏:

#define drive_enable (Regs [ ENABLE_MOTOR_ADDRESS ]) 

使用指針:

int16 *drive_enable = &(Regs [ ENABLE_MOTOR_ADDRESS ]); 

是其中一個比另一個更好嗎?對我來說,使用宏看起來更方便,因爲我避免在每次使用變量時都需要引用解引用。然而,我從來沒有對宏的好感...

任何意見?

+3

宏方法看起來相當自然的,但在這種情況下,我可能更喜歡寫爲'DRIVE_ENABLE' –

+1

你還不如使用相同的名稱ENABLE_MOTOR(寄存器[ENABLE_MOTOR_ADDRESS ]) – QuentinUK

+0

這兩個是不同的東西。一個聲明一個變量,另一個不是 –

回答

4

我會建議使用功能:

int is_drive_enabled() 
{ 
    return (Regs [ ENABLE_MOTOR_ADDRESS ] == 1); 
} 

void enable_drive() 
{ 
    Regs [ ENABLE_MOTOR_ADDRESS ] = 1; 
} 

void disable_drive() 
{ 
    Regs [ ENABLE_MOTOR_ADDRESS ] = 0; 
} 
+0

Nitpick:兩個底層函數中的'return's。 – szczurcio

+0

@szczurcio,感謝您的注意和通知:) –

+2

如果函數調用的開銷不受歡迎,它們可以是「inline」 –