2016-01-19 1 views
1

J'ai un tableau fixe des valeurs qui doivent être comme il est, car il est accessible de cette façon avec le protocole de communication utilisé (ne concerne pas la question), de cette façon:Mieux vaut utiliser une définition de macro ou un pointeur pour une valeur dans un tableau?

#define REGS_ARRAY_SIZE 256 
int16 Regs[REGS_ARRAY_SIZE]; 

Chaque valeur a un but spécifique , par exemple:

Regs[ENABLE_MOTOR_ADDRESS] 

sera utilisé pour indiquer d'un moteur est activé avec 0 ou 1.

pour utiliser plus confortablement ce genre de valeurs qui doit être accessible à partir du code I écrire et de l'extérieur t hrough le protocole de communication, j'ai pensé que mes options sont:

Pour utiliser une macro:

#define drive_enable (Regs [ ENABLE_MOTOR_ADDRESS ]) 

Pour utiliser un pointeur:

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

Est-ce un d'eux mieux que l'autre? Pour moi, il semble plus pratique d'utiliser la macro, car j'évite d'introduire le besoin de déréférencer chaque fois que j'utilise la variable. Cependant je n'ai jamais de bons sentiments envers les macros ...

Un conseil?

+3

L'approche macro semble assez naturel, bien que dans ce cas, je pourrais essayez d'écrire comme 'DRIVE_ENABLE' –

+1

Vous pourriez aussi bien utiliser le même nom ENABLE_MOTOR (Regs [ENABLE_MOTOR_ADDRESS ]) – QuentinUK

+0

Les deux sont des choses différentes. On déclare une variable l'autre ne l'a pas –

Répondre

4

Je recommande d'utiliser les fonctions:

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 dans les deux fonctions du bas. – szczurcio

+0

@szczurcio, merci de noter et de notifier :) –

+2

Si la surcharge des appels de fonction est indésirable, ils peuvent être «en ligne» –