J'essayais de comprendre la signification exacte de la portée en C. Ce que j'ai pu comprendre, c'est que la portée est limitée au temps de compilation uniquement. Par exemple, si vous accédez à une variable locale à partir d'une autre fonction. Cela entraînera une erreur de compilation. D'un autre côté, le programme suivant fonctionne bien. Cela signifie que le C a un modèle de mémoire plat et que l'on peut accéder à tout au moment de l'exécution. Les livres de C associent le champ d'application à la durée de vie et à la visibilité des variables, je trouve cela assez déroutant. Je pense que tous ces termes n'ont de sens qu'au moment de la compilation. Quelqu'un peut-il m'éclairer à ce sujet ?
#include "stdio.h"
int *ptr;
int func(void)
{
/** abc is a local variable **/
int abc = 132;
ptr = &abc;
return 0;
}
int func1(void)
{
/** although scope of abc is over still I can change the value in the address of abc **/
*ptr = 200;
printf("the value of abc=%d\r\n",*ptr);
}
int main(void)
{
func();
func1();
return 0;
}
Résultats : la valeur de abc
=200
En termes plus simples, qu'entend-on par portée ? Intervient-elle au moment de l'exécution ou de la compilation ? Comme nous pouvons le constater, nous pouvons accéder à tout au moment de l'exécution. Mais, si nous ne respectons pas les règles, nous obtiendrons une erreur de compilation. Par exemple, la référence à une variable locale dans une autre fonction. Le compilateur lancera une erreur disant "variable non définie...".
Puis-je dire la chose suivante à propos des variables ?
1) Scope attribute comes under compile time.
2) Lifetime attribute comes under run-time.
3) Visibility attribute comes under compile-time