Articles of c99

taille maximale de printf / fprintf selon c99

La norme C99 dit: Le nombre de caractères pouvant être générés par une conversion unique est d’au moins 4095. Cela signifie-t-il que la taille maximale est de 4095 si oui pourquoi son dit “au moins”?

Le qualificatif de type restreint C99 / C11 implique-t-il quelque chose pour des fonctions sans définition?

Supposons que nous ayons une déclaration de fonction pour laquelle nous n’avons pas access à sa définition: void f(int * ressortingct p, int * ressortingct q, int * ressortingct r); Comme nous ne soaps pas comment les pointeurs seront accédés, nous ne pouvons pas savoir si un appel déclenchera ou non un comportement indéfini – […]

c99 goto initial initial

Lors du débogage d’un crash, j’ai rencontré ce problème dans un code: int func() { char *p1 = malloc(…); if (p1 == NULL) goto err_exit; char *p2 = malloc(…); if (p2 == NULL) goto err_exit; … err_exit: free(p2); free(p1); return -1; } Le problème se produit lorsque le premier malloc échoue. Parce que nous sautons […]

_Bool type de données de C99

Le standard C99 du langage de programmation C définit le type de données _Bool tant que macro pour un autre type de données (car le langage ne peut pas traiter un type safe boolean). Est-ce que le _Bool une macro pour unsigned char , unsigned int ou un autre type de données?

Comment appliquer des déclarations de variables de style C89 dans gcc?

Je travaille sur une base de code principalement composée de C avec un peu de C ++ et construite principalement avec gcc, mais elle doit parfois être construite avec MSVC. Le compilateur C de Microsoft est toujours à peu près C89 avec quelques extensions mineures et ne prend toujours pas en charge le code mixte […]

Est-il possible qu’un littéral composé ait une longueur variable dans c99?

Je sais que les tableaux avec des longueurs déterminées au moment de l’exécution sont possibles en déclarant le tableau normalement: char buf[len]; et je sais que je peux déclarer un tableau en tant que composé litral et l’assigner à un pointeur à mi-chemin: char *buf; …. buf = (char[5]) {0}; Cependant, la combinaison des deux […]

Les tableaux de longueur variable de longueur nulle sont-ils autorisés / bien définis?

Je programme en C99 et utilise des tableaux de longueur variable dans une partie de mon code. Je sais que dans C89, les tableaux de longueur nulle ne sont pas autorisés, mais je ne suis pas sûr des tableaux C99 et de longueur variable En bref, le comportement suivant est-il bien défini? int main() { […]

Le caractère non signé est-il toujours promu en int?

Supposons ce qui suit: unsigned char foo = 3; unsigned char bar = 5; unsigned int shmoo = foo + bar; Les valeurs foo et bar garanties comme étant promues en valeurs int pour l’évaluation de l’expression foo + bar – ou les implémentations sont-elles autorisées pour les promouvoir en unsigned int ? Dans la […]

Existe-t-il une différence entre initialiser une variable et lui affecter une valeur immédiatement après la déclaration?

En supposant un compilateur purement non optimisant, existe-t-il une différence de code machine entre l’initialisation d’une variable et l’atsortingbution d’une valeur après la déclaration? Méthode d’initialisation : int x = 2; Méthode d’affectation : int x; x = 2; J’ai utilisé GCC pour générer l’assemblage généré pour ces deux méthodes différentes et les deux ont […]

Comment la mémoire est-elle allouée pour un tableau multidimensionnel défini implicitement dans C99?

J’essaie d’écrire un programme C99 et j’ai un tableau de chaînes implicitement défini comme tel: char *stuff[] = {“hello”,”pie”,”deadbeef”}; Comme les dimensions du tableau ne sont pas définies, combien de mémoire est allouée pour chaque chaîne? Est-ce que toutes les chaînes ont le même nombre d’éléments que la plus grande chaîne de la définition? Par […]