Quelle est la différence entre static const
y const
? Par exemple :
static const int a=5;
const int i=5;
Y a-t-il une différence entre eux ? Quand utiliseriez-vous l'un plutôt que l'autre ?
Quelle est la différence entre static const
y const
? Par exemple :
static const int a=5;
const int i=5;
Y a-t-il une différence entre eux ? Quand utiliseriez-vous l'un plutôt que l'autre ?
static
détermine la visibilité à l'extérieur d'une fonction ou la durée de vie d'une variable à l'intérieur. Cela n'a donc rien à voir avec const
en soi.
const
signifie que vous ne modifiez pas la valeur après qu'elle a été initialisée.
static
à l'intérieur d'une fonction signifie que la variable existera avant et après l'exécution de la fonction.
static
en dehors d'une fonction signifie que la portée du symbole marqué static
est limité à ce fichier .c et ne peut être vu en dehors de celui-ci.
Techniquement (si vous voulez vérifier), static
est un spécificateur de stockage et const
est un qualificatif de type.
La différence est le lien.
// At file scope
static const int a=5; // internal linkage
const int i=5; // external linkage
Si le i
n'est pas utilisé en dehors de l'unité de traduction où il est défini, vous devez le déclarer avec la balise static
spécificateur.
Cela permet au compilateur d'effectuer (potentiellement) d'autres optimisations et informe le lecteur que l'objet n'est pas utilisé en dehors de son unité de traduction.
Cela dépend si ces définitions sont à l'intérieur d'une fonction ou non. La réponse pour le cas à l'extérieur de une fonction est donnée par ouah, ci-dessus. À l'intérieur de d'une fonction, l'effet est différent, illustré par l'exemple ci-dessous :
#include <stdlib.h>
void my_function() {
const int foo = rand(); // Perfectly OK!
static const int bar = rand(); // Compile time error.
}
Si vous voulez qu'une variable locale soit "réellement constante", vous devez la définir non seulement "const" mais "static const".
const int i=5;
i
que vous pouvez modifier en utilisant un pointeur si i
est défini et déclaré localement, si elle est static const int a=5;
o const int i=5;
Globalement, vous ne pouvez pas le modifier car il est stocké dans la mémoire du RO dans le segment de données.
#include <stdio.h>
//const int a=10; /* can not modify */
int main(void) {
// your code goes here
//static const int const a=10; /* can not modify */
const int a=10;
int *const ptr=&a;
*ptr=18;
printf("The val a is %d",a);
return 0;
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.