Articles of const

Comment déclarer un tableau de pointeurs de fonction constants en C?

J’ai besoin de déclarer un tableau de pointeurs vers des fonctions telles que: extern void function1(void); extern void function2(void); … void (*MESSAGE_HANDLERS[])(void) = { function1, function2, … }; Cependant, je veux que le tableau soit déclaré comme constant – à la fois les données du tableau et le pointeur sur les données. Malheureusement, je ne […]

Erreur «affectation ‘const’ qualificatif» sur un pointeur non-const

Dans la fonction suivante: char *mystrtok(const char *input, const char *delim,char *rest) { int i; for (i = 0; input[i] != *delim && input[i] != ‘\0’; ++i) { continue; } char *result = malloc(sizeof(char) * (i + 2)); memcpy(result, input, i + 1); result[i + 1] = ‘\0’; if (input[i + 1] != ‘\0’) rest […]

C fournit-il un moyen de déclarer une variable externe en lecture seule, mais de la définir en écriture?

Je développe une bibliothèque d’abstraction matérielle pour un produit intégré à l’aide de GCC C. Cette bibliothèque contient une variable qui doit être en lecture seule pour l’application qui relie la bibliothèque, mais qui peut être modifiée à partir de l’unité de compilation qui la définit. Existe-t-il un moyen standard et acceptable de déclarer l’entier […]

Pourquoi n’est-il pas légal de convertir «pointeur en pointeur en non-const» en «pointeur en pointeur vers const»

Il est légal de convertir un pointeur sur non-const en un pointeur sur const. Alors pourquoi n’est-il pas légal de convertir un pointeur en pointeur en non-const en un pointeur en pointeur en const ? Par exemple, pourquoi le code suivant est-il illégal: char *s1 = 0; const char *s2 = s1; // OK… char […]

Pourquoi le compilateur vous permet-il «d’écrire» une variable const ici?

Pourquoi pouvez-vous sortingcher du compilateur de cette façon: const int a = 5; *((int*)&a)=5; // VC/armcc does not complain quand ci-dessus est “abrégé” équivalent à ceci: const int *ptr2const = &a; int *ptr = ptr2const; // as expected error is raised here *ptr = 5;

Const-correctness et objects alloués immuables

Au cours d’une discussion récente (voir les commentaires relatifs à cette réponse ), R .. recommande de ne jamais créer d’alias pour les types pointeur sur const car vous ne pourrez pas free() facilement les objects référencés dans un programme C conforme (rappelez-vous: free() prend un argument de pointeur non- const et C99 6.3.2.3 n’autorise […]

l’abandon de la constance peut-il conduire à un comportement indéfini?

const int a = 10 int *p = (int*) &a; *p = 20; printf(“a = %d”, a); Est-il possible de sortir 10 ou 20, en fonction du compilateur?

Les types de retour Const en C

Je lisais quelques exemples de code, et ils ont renvoyé un const int. Lorsque j’ai essayé de comstackr le code d’exemples, j’ai eu des erreurs concernant des types de retour en conflit. Alors j’ai commencé à chercher, pensant que le problème était le problème (quand je l’ai supprimé, le code fonctionnait bien, non seulement il […]

Pourquoi est-ce que je reçois un message d’erreur indiquant que l’initialiseur n’est pas une constante?

J’utilise le code suivant. const int X_ORIGIN = 1233086; const int Y_ORIGIN = -4728071; const int Z_ORIGIN = 4085704; const int xyzOrigin[NUM_DIMENSIONS] = {X_ORIGIN, Y_ORIGIN, Z_ORIGIN}; Lorsque je le comstack, GCC me donne l’erreur suivante. Transformations.h: 16: 1: erreur: l’élément d’initialisation n’est pas constant Qu’est-ce que ça veut dire? Comment puis-je réparer mon code?

conversion pointeur-const en C

Le code suivant est compilé sans avertissement sur GCC, mais donne un avertissement dans Visual Studio 2005. const void * x = 0; char * const * p = x; x pointe sur un object constant de type inconnu et p pointe sur un pointeur constant sur char. Pourquoi l’affectation à p devrait-elle donner lieu […]