Articles of c99

Existe-t-il une #define pour C99?

Je veux faire quelque chose dans C99 d’une manière, sinon l’exécuter d’une autre manière. Quelle est la #define à vérifier? #ifdef C99 … #else … #endif

Comment comstackr un projet C en mode C99?

J’ai reçu le message d’erreur suivant lors de la compilation du code C: error: ‘for’ loop initial declarations are only allowed in C99 mode note: use option -std=c99 or -std=gnu99 to comstack your code Qu’est-ce que ça veut dire? Comment le réparer?

Pourquoi int x est-il faux, où n est une valeur const?

Je ne comprends pas pourquoi cela est faux: const int n = 5; int x[n] = { 1,1,3,4,5 }; même si n est déjà une valeur const. Cela semble correct pour le compilateur GNU: const int n = 5; int x[n]; /*without initialization*/ Je connais la fonctionnalité VLA de C99 et je pense que cela […]

Allocation d’une structure avec un membre de tableau flexible

C’est le code C99: typedef struct expr_t { int n_children; foo data; // Maybe whatever type with unknown alignment struct expr_t *children[]; } expr_t; Maintenant, comment allouer de la mémoire? expr_t *e = malloc (sizeof (expr_t) + n * sizeof (expr_t *)); ou expr_t *e = malloc (offsetof (expr_t, children) + n * sizeof (expr_t […]

C99 – pourquoi faux et vrai sont-ils définis comme 0 et 1 et non comme ((bool) 0) et ((bool) 1)?

Je viens de trébucher sur une assertion, qui a échoué, car elle comparait false au type de retour d’une fonction, car la fonction elle-même renvoyait une valeur booléenne et l’assert vérifiait non seulement la valeur, mais également le type de la valeur de retour pour correspondre à celle de false, pour garantir qu’un bool est […]

Comment parsingr une chaîne dans une structure datetime en C?

Je voudrais avoir une chaîne (char *) analysée dans une structure tm en C. Y a-t-il une fonction intégrée pour faire cela? Je fais référence à ANSI C dans la norme C99.

Int main () {} (sans «void») est-il valide et portable dans ISO C?

La norme C spécifie deux formes de définition de main pour une implémentation hébergée: int main(void) { /* … */ } et int main(int argc, char *argv[]) { /* … */ } Il peut être défini de manière “équivalente” à celle ci-dessus (par exemple, vous pouvez modifier les noms des parameters, remplacer int par un […]

Pourquoi les identificateurs typedef sont-ils autorisés à être déclarés plusieurs fois?

De la norme C99, 6.7 (5): Une déclaration spécifie l’interprétation et les atsortingbuts d’un ensemble d’identifiants. Une définition d’un identifiant est une déclaration pour cet identifiant qui: pour un object, le stockage est réservé à cet object; pour une fonction, inclut le corps de la fonction; pour une constante d’énumération ou un nom typedef, est […]

Est-il toujours prudent de convertir une valeur entière en void * et inversement dans POSIX?

Cette question est presque une copie de certaines des questions que j’ai trouvées, mais elle concerne spécifiquement POSIX et un exemple très courant dans les pthreads que j’ai rencontré à plusieurs resockets. Je suis surtout préoccupé par l’état actuel des choses (c’est-à-dire C99 et POSIX.1-2008 ou ultérieur), mais toute information historique intéressante l’est aussi. La […]

Recevez un avertissement quand une variable est ombrée

Je veux généralement éviter un code comme celui-ci: #include int main(int argc, char *argv[]){ int n = 3; for (int n = 1; n <= 10; n++){ printf("%d\n", n); } printf("%d\n", n); } Comment puis-je trouver un tel usage des variables? Cela signifie que, dans la même fonction, une variable “plus locale” a le même […]