Articles of gcc

avertissement: le format ‘% s’ attend le type ‘char *’, mais l’argument 2 a le type ‘int’

Je pense que ce code et cette erreur sont explicites, mais je ne sais pas pourquoi? Environnement: OS: Mac OS X 10.6.1 Compilateur: i686-apple-darwin10-gcc-4.2.1 code: 1 #include 2 #include 3 #include 4 #include 5 6 int 7 main(int argc, char **argv) 8 { 9 char *ptr, **pptr; 10 struct hostent *hptr; 11 char str[32]; 12 […]

Pourquoi inclure un fichier h avec des vars et des fonctions externes entraîne des références non définies

Que se passe-t-il si je souhaite que ces externals soient résolus dans l’exécution avec dlopen? J’essaie de comprendre pourquoi l’inclusion d’un fichier h, avec des vars externes et des fonctions de bibliothèque partagée, dans un programme exécutable en C entraîne un résultat non défini / non résolu. (lors de la liaison) Pourquoi dois-je append l’indicateur […]

Pourquoi le compilateur suppose-t-il que ces pointeurs apparemment égaux diffèrent?

On dirait que GCC, avec quelques optimisations, pense que deux pointeurs provenant d’unités de traduction différentes ne peuvent jamais être identiques, même s’ils sont réellement identiques. Code: principal c #include #include int a __atsortingbute__((section(“test”))); extern int b; void check(int cond) { puts(cond ? “TRUE” : “FALSE”); } int main() { int * p = &a […]

Explication de la macro FIELD_SIZEOF du kernel Linux

J’apprends c99 et après avoir lu sur les structures j’ai trouvé la macro suivante dans le code du kernel Linux : #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) Je .. quoi? Usage: #include #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) struct book { char title[100]; char author[100]; }; int main(void) { printf(“%lu\n”, FIELD_SIZEOF(struct book, title)); // prints 100 } Voici l’extension […]

boucles nestedes, parallélisation de boucle interne, réutilisation de threads

Clause de non-responsabilité: l’exemple suivant n’est qu’un exemple factice pour comprendre rapidement le problème. Si vous pensez à un problème du monde réel, pensez à toute programmation dynamic. Le problème: nous avons une masortingce n * m et nous voulons copier les éléments de la ligne précédente comme dans le code suivant: for (i = […]

Étant donné l’état de la stack et des registres, pouvons-nous prédire le résultat du comportement non défini de printf

Voici un code C simple pour un quiz de classe: #include int main() { float a = 2.3; printf(“%d\n”, a); return 0; } Compilé et exécuté sur: Apple LLVM version 6.1.0 ( clang-602.0.53 ) (basé sur LLVM 3.6.0svn) Cible: x86_64 -apple-darwin14.5.0 La sortie de ce code n’est undefined . J’essaie de prédire la sortie en […]

Extra précision des valeurs vues pour les valeurs float

Vous trouverez ci-dessous le code de la solution pour un exercice de la méthode de programmation moderne de KN King. #include int main(void) { int i; float j,x; scanf(“%f%d%f”,&x,&i,&j); printf(“i = %d”,i); printf(“x = %f”,x); printf(“j = %f”,j); } Consortingbution: 12.3 45.6 789 Résultat attendu : i = 45 x = 12.3 j = 0.6 […]

Existe-t-il un moyen de sensibiliser GCC / Clang à l’inheritance en C?

J’écris une bibliothèque C qui utilise un inheritance simple orienté object un peu comme ceci: struct Base { int x; }; struct Derived { struct Base base; int y; }; Et maintenant je veux passer un Derived * à une fonction qui prend une Base * un peu comme ceci: int getx(struct Base *arg) { […]

force la fonction inline dans une autre unité de traduction

Cette partie du manuel de gcc est assez obscure et je ne comprends pas l’utilisation de l’atsortingbut forceinline après plusieurs tentatives. Je définis un object et certaines fonctions pour manipuler cet object. Peu de ces fonctions peuvent utiliser des instructions atomiques et je veux que le compilateur intègre ces fonctions. Cependant, je ne veux pas […]

Le débordement d’entier est-il indéfini dans l’assemblage en ligne x86?

Disons que j’ai le code C suivant: int32_t foo(int32_t x) { return x + 1; } Ce comportement n’est pas défini lorsque x == INT_MAX . Supposons maintenant que j’ai effectué l’ajout avec l’assemblage en ligne: int32_t foo(int32_t x) { asm(“incl %0” : “+g”(x)); return x; } Question: La version d’assembly en ligne invoque-t-elle toujours […]