L’access à un object non const via une déclaration const autorisé par le standard C? Par exemple, le code suivant est-il garanti pour la compilation et la sortie 23 et 42 sur une plate-forme conforme aux normes? unité de traduction A: int a = 23; void foo(void) { a = 42; } unité de traduction […]
J’essaie de construire un commutateur et j’obtiens une “expression doit être de type intégral ou enum”. Je suppose que le commutateur dans Winapi ne prend pas les variables de type LPSTR? char testbuf[ 51 ]; // allocate space for 50 characters + termination LPSTR test = testbuf; scanf(“%50s”, test); // read at most 50 characters […]
Pourquoi est-il permis de changer une variable const en utilisant un pointeur sur memcpy? Ce code: const int i=5; int j = 0; memcpy(&j, &i, sizeof(int)); printf(“Source: i = %d, dest: j = %d\n”, i,j); j = 100; memcpy(&i, &j, sizeof(int)); printf(“Source: j = %d, dest: i = %d\n”, j,i); return 0; compilé avec juste […]
Je n’arrive pas à comprendre comment dire à C que je veux un pointeur qui ne bougera pas. Cela indiquera toujours le même tableau. Cela dit, les membres du tableau ne sont pas constants, mais le tableau lui-même est global et est donc à une position fixe. Alors, quand je code ceci: #include int v[2]={0, […]
On m’a dit que si je codais en ANSI-C pour déclarer dans l’ordre d’utilisation des variables, affirmer que les pointeurs ne sont pas nuls et que les index sont dans les limites, et s’initialiser juste avant l’utilisation de la variable. Si je déclare un const, puis-je l’initialiser après un bloc d’assertions et de code? En […]
Comment définissez-vous un tableau constant d’objects constants en C (pas C ++)? Je peux définir int const Array [] = { /* init data here */ }; mais c’est un tableau non constant d’objects constants. je pourrais utiliser int const * const Array = { /* init data here */ }; et cela fonctionnerait probablement. […]
J’ai écrit un programme C en gcc et cela me donne une sortie très inattendue. Le code est: #include int main(){ const int x=10; int *p=&x; *p=11; printf(“%d\n”,*p); printf(“%d”,x); printf(“\n%u\n”,p); printf(“%u”, &x); } Ici la sortie est: 11 dix 37814068 37814068 Pourquoi p et & x donnent la même adresse (37814068) mais des valeurs différentes […]
étant donné le code suivant: /* signatures */ int getParams(char params[MAX_PARAM_LEN][MAX_LINE_LEN]); int getVersion(const char params[MAX_PARAM_LEN][MAX_LINE_LEN], const char* tagName ); /* initializing */ char params[MAX_PARAM_LEN][MAX_LINE_LEN] = {}; /* getting parameters */ paramCount = getParams(params); /* OK, params match with getParams signature */ /* processing the params array */ i = getVersion(params, “version”); /* warning: passing arg […]
Dupliquer possible: pourquoi n’est-il pas légal de convertir (pointeur en pointeur en non-const) en un pointeur Avertissements de correction de double pointeur en C Je passe un gchar** à un g_key_file_set_ssortingng_list qui attend un const gchar * const identifier [] /* this function is part of the GLib library */ void g_key_file_set_ssortingng_list(GKeyFile *key_file, const gchar […]
Si je veux utiliser les instructions du préprocesseur #define pour faciliter la définition et le calcul des constantes et des fonctions communes, et tirer parti de moins de charge de mémoire vive (par opposition à l’utilisation de valeurs const ). Cependant, je ne sais pas comment ils sont résolus si plusieurs macros sont utilisées ensemble. […]