Non, ils sont différents.
const
est juste un qualificatif, qui dit à la variable(!) qu'il ne peut pas être modifiée lors de l'exécution. Mais tous les autres attributs de variable persistent: il a de stockage alloué, et ce stockage peut être adressée. Si aucun code ne pas l'utiliser comme littéral, mais se réfère à elle en accédant à l'emplacement de mémoire spécifiée (uniquement en cas de statc il peut simplement être optimisé), et en le convertissant vers un type de données lors de l'exécution. Et comme il ont de stockage alloué, si vous l'ajoutez à en-tête et de l'inclure dans plusieurs sources c, vous obtiendrez un lien d'erreur de plusieurs la définition du symbole jusqu'à ce que vous marquez comme extern. Et dans ce cas le compilateur shoudn pas optimiser du code par rapport à sa valeur réelle (jusqu'à l'optimisation globale est sur).
#define
remplace simplement un nom avec sa valeur. De plus, en #define'd
constante peut être utilisé dans de préprocesseur: #ifdef
d'avoir de compilation conditionnelle au moment de sa valeur, stringize #
d'avoir de la chaîne avec sa valeur. Et comme compilateur peut analyser sa valeur, il peut optimiser le code qui dépend d'elle et de faire des conversions demandées au moment de la compilation.
Pour cet exemple de code:
#define SCALE 1
...
scaled_x = x * SCALE;
Alors qu'il ont SCALE
défini à l' 1
compilateur supprime simplement multiplications qu'elle sait qu' x * 1 == x
,, mais si il ont (extern
) const
, il fera attention à compiler const chercher et réelle de la multiplication, car il ne peut pas réaliser ce qui sera constante comme elle va être connu que sur la liaison de la scène. (Extern
est nécessaire pour l'utilisation constante à partir de plusieurs fichiers source).
De plus près l'équivalent de la définition de l'est à l'aide d'énumérations:
enum dummy_enum{
constant_value = 10010
};
Mais il limité à des valeurs entières et ont pas les avantages de l' define
, de sorte qu'il n'est pas largement utilisé.
const
est utile lorsque vous devez importer la valeur de la constante à partir d'une bibliothèque où il compilé. Ou si elle est utilisée avec des pointeurs. Ou c'est le tableau de valeurs constantes accessible via la variable valeur de l'indice. Jusqu'à ce qu'un besoin de ce const
n'ont aucun avantages par rapport define
.