Comment utiliser C11 standard dans Code::Blocks
Comme le dit le Titre j'ai besoin de faire code::blocks
de travailler avec C11
et je ne peux pas comprendre comment le faire.
Je suis allé à settings
=> compiler settings
=> Other options
et j'ai ajouté -std=c11
et a essayé aussi avec -std=gnu11
, les deux ne semble pas fonctionner.
J'ai compilé gcc-5.2
et puis j'ai changé la valeur par défaut du compilateur (gcc-4.9) et toujours pas de résultat.
Lorsque j'essaie de compiler le programme suivant:
#include<stdio.h>
int main(void){
int arr[] = {0,1,2,3,4};
for(int i=0;i<5;i++){
printf("%d ",arr[i]);
}
return 0;
}
Je reçois le texte suivant:
|6|error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode|
Mais si je le fais dans un terminal (ubuntu 15.04, 64BIT, gcc-5.2):
./install/gcc-5.2.0/bin/gcc5.2 program.c -o program
Semble bien fonctionner.
Ma question est, comment faire code::blocks
de travailler avec c11
?
Depuis la GCC 5.x versions courir avec
Ce sont les Options qui est utiliser =>>
Le
Merci, vous avez droit,
-std=gnu11
par défaut, Code::Blocks doit être en train de faire quelque chose (comme en passant -ansi
ou -std=gnu90
) pour le compilateur pour le faire fonctionner différemment. Étudier toutes les options qui sont envoyés pour le compilateur. Trouver un moyen pour Code::Blocks vous montrer exactement incantation qu'il utilise lors de la compilation. Puis travailler sur la façon de le résoudre. (Je n'ai pas utilisé de Code::Blocks donc je ne peux pas être plus utile que le que — en supposant que c'est de l'aide.)Ce sont les Options qui est utiliser =>>
-Wall -Wextra -Werror -Wstrict-prototypes -Wconversion -std=gnu11 -O0 -g -ansi
pkg-config --cflags gtk+-3.0
Le
-ansi
est en train de faire des dégâts; il est équivalent à -std=c90
ou peut-être -std=gnu90
— il explicitement annule -std=c11
ou -std=gnu11
. (Et, pour info, vous pouvez incorporer des back-quotes dans le bloc de code d'un commentaire à l'aide de deux de début et de fin et au milieu: -Wall … `pkg-config --cflags gtk+-3.0`
— comme ça.Merci, vous avez droit,
-ansi
était le problème. Je l'ai bien que j'ai besoin de cette option trop, je veux dire -ansi
OriginalL'auteur Michi | 2015-12-08
Vous devez vous connecter pour publier un commentaire.
Depuis la GCC 5.x versions courir avec
-std=gnu11
par défaut, Code::Blocks doit être en train de faire quelque chose (comme en passant-ansi
ou-std=gnu90
) pour le compilateur pour le faire fonctionner différemment.Étudier toutes les options qui sont envoyés pour le compilateur. Trouver un moyen pour Code::Blocks vous montrer exactement incantation qu'il utilise lors de la compilation. Puis travailler sur la façon de le résoudre.
La
-ansi
est en train de faire des dégâts; il est équivalent à-std=c90
ou peut-être-std=gnu90
— il explicitement annule-std=c11
ou-std=gnu11
.Oui, même si la
-O0
n'est pas celui que j'avais utilisé normalement. J'utilise régulièrement les-O3 -g
. - Je ajouter quelque chose:-Wmissing-prototypes -Wold-style-definition
, et parfois en ajouter d'autres. Une fois que vous perdez la-ansi
, ce que vous avez est réalisable mais peut-être un peu sous-optimale (parce que-O0
signifie un minimum d'optimisation).La principale raison je utiliser
-O0
est à cause de ça =>> Veuillez prendre un coup d'oeilHum...intéressant. Compiler avec
-O0
de sorte que même si votre programme est tellement simple que GCC peuvent optimiser loin vos fuites de mémoire, ils ont encore repéré parce qu'ils ne sont pas optimisées loin. Si la mémoire n'est pas une fuite, car le compilateur spots qu'il n'a pas besoin d'allouer de la mémoire, est-il encore d'une fuite? (Et ne un arbre qui tombe dans la forêt, faire du bruit quand il n'y a personne là pour l'entendre?) Il est intéressant de voir comment sophistiqué de l'optimiseur. Je ne suis pas sûr que je serais aller sur l'aide de-O0
très souvent juste à cause de cela. Merci pour le x-réf.Je ne pense pas que cela va fonctionner avec l'installation par défaut de Codeblocks, car il utilise une ancienne version de GCC. J'ai installé Codeblocks la moitié il y a un an et puis j'ai dû manuellement le dire d'utiliser un autre GCC. Depuis cet été pour Windows, j'ai eu à souligner le MinGW 64 installation.
OriginalL'auteur Jonathan Leffler
Suis qu'un apprenant débutant - très nouveau) mais j'espère que cela peut aider (même si le fil est vieux).
(code visible dans l'image est un exemple 12.2 -- forc99.c) de Stephen Prata C Primer Plus)
J'ai créé de nouveaux drapeau
Paramètres -> Compiler -> (général)clic Droit sur le général -> Nouveau Drapeau -> Entrez les détails de l'image -> Ok
Après cela, cochez la case de la nouvelle drapeau venez de créer. (a fonctionné pour moi)
[Si vous regardez dans l'image il y a une option-std=c99 (juste au-dessus de celui que j'ai créé), Vous pouvez utiliser cette option pour c99].
(Par la voie de la version de gcc pour code::blocks 16.01 mingw 32 bits, j'utilise cela, est 4.9.2)
OriginalL'auteur 1556089774
En supposant que Codeblocks 13.12 pour Windows, il est livré avec une ancienne version de GCC (4.7.1) qui ne prend pas en charge C11.
C:\Program Files\mingw-w64\x86_64-4.9.1-win32-seh-rt_v3-rev1\mingw64
.x86_64-w64-mingw32-gcc.exe
(puisque vous maintenant peut avoir plusieurs installations de GCC sur votre ordinateur) et que le programme make estmingw32-make.exe
.-std=c11
. Cliquez sur ok et vérifiez les nouveaux C11 option que vous venez de créer.ubuntu 15.04, 64BIT, gcc-5.2
. De toute façon, +1 pour ta Réponse.Le chemin de la configuration de Codeblocks pour choisir un autre compilateur & ensemble pour compiler selon C11 devrait être le même dans Ubuntu. Beaucoup plus facile sans doute, puisque vous n'avez pas à passer par le Mingw installation de chichi. De toute façon, vous semblez être l'ajout d'options de compilation dans le mauvais sens, cette réponse explique comment vous devez définir Codeblocks pour compiler pour C11.
Cette
-Wall -Wextra -Werror -Wstrict-prototypes -Wconversion -Wmissing-prototypes -Wold-style-definition -std=c11 -O0 -g
sont mes options du compilateur, mais j'avais utilisé-ansi
et je ne savais pas que les conflits avec-std=c11
.OriginalL'auteur Lundin
Accédez à Paramètres-> compiler-> options du Compilateur-> Général> cochez la case à côté de "g++ suivez le c++11 ISO"
FAIT!!!!!
OriginalL'auteur Jyoti Yadav
J'ai aussi été confronté au même problème dans mon CodeBlock Projet.
Je suis l'aide de la version CodeBlock Version:17.12.
Je fixe avec des étapes suivantes:
Espère que cela fonctionne pour vous les gars.
OriginalL'auteur Chandan kumar
Accédez à Paramètres -> paramètres du Compilateur
Assurez-vous que global compiler settings dans l'onglet de gauche est sélectionné.
Sur l'onglet de droite, cliquez sur paramètres du Compilateur onglet. Sous l'onglet général, cochez la case en regard de "Ont gcc suivre l'1999 ISO norme du langage C [-std=c99]
OriginalL'auteur CodeSurfer3022
La raison en est parce que vous êtes déclarant i dans la boucle for.
Essayez de séparer, comme ci-dessous:
Il va travailler. Amusez-vous bien:)
Il n'y a rien de mal avec le code, la question est sur le C11. Savez-vous à quel C11, ou même C99 est? Cela ne veut pas répondre à la question - il n'est même pas lié à la question.
OriginalL'auteur Ayesha Gupta
aller à "paramètres" -> "compilateur", puis voir l'option de suivre "c++11 ISO inc compilateur" onglet paramètre.
OriginalL'auteur Ravi Guru