0
votes

Pourquoi CODEBLOCKS met-il en évidence la classe de mots-clés et la compilation sans erreur (je suis programmée en C)?

J'essayais de créer une classe en C, après avoir vu un didacticiel.

J'ai vu une vidéo sur des classes et des objets sur YouTube, le code était en Java mais l'instructeur a dit que c'est la même chose pour d'autres langues aussi. J'ai appris de base en C langue C. Lorsque j'ai ouvert le code :: Blocs et dactylographié "Classe" Il en surligna et ensuite je l'ai compilé sans erreur. Je sais que c N'est-ce pas une langue de OOP afin de ne pas contenir de cours. Et oui, le fichier était un fichier .C. xxx

Il n'y a pas d'erreur lors de la compilation, mais il y a quelques avertissements xxx


6 commentaires

"Je sais que c N'EST PAS UNE LANGUE OOP afin de ne pas contenir de cours." C'est vrai. En raison de cela, classe int; est valide, car class n'est pas un mot clé réservé, comme foobar par exemple. L'avertissement indique qu'il tourne implicitement votre classe ; dans classe int; .


> Il tourne implicitement votre classe; en classe int; C'est sale!


Parce que CodeBlocks n'est pas si bon d'une IDE. Il met en évidence classe car c'est un mot clé C ++. Je ne sais pas pourquoi il est mis en évidence dans un code C.


@Holyblackcat J'ai également essayé d'autres ides en ligne, mais ils ont également mis en évidence "Classe" comme mot clé


@Sandeephiven signifie que ces IDes ne se sont pas préoccupés par la mise en évidence appropriée pour C aussi.


Note latérale: En C, la fonction principale () doit être définie sur le type de retour int , pas vide . Mais comme cas particulier, si le contrôle atteint le support de fermeture de cette fonction particulière, elle est traitée comme si un retourner 0; a été exécuté.


3 Réponses :


1
votes

Les raisons sont deux, premièrement, CodeBlocks est, pour une raison quelconque, vous trompant en soulignant un mot qui n'est pas un mot clé de C. Deuxièmement, l'ancienne règle «Implicite Int», déposée par la norme C en C 2011 est la compilation. votre classe ; comme classe int; . Je suggère que si vous commencez à démarrer, vous devriez mettre un -pedantic-erreurs -wall -wall dans les options de compilation afin que vous soyez protégé de ceci et d'autres comportements similaires.


0 commentaires

0
votes

C'est correct. La classe dans votre cas est une déclaration de la variable ayant la classe nom . Parce que vous n'avez pas spécifié le type, il est par défaut à int . Comme il y a un avertissement, l'EDI met en évidence cette déclaration.


0 commentaires

1
votes

J'ai vu la vidéo sur des classes et des objets sur YouTube, le code était en Java Mais l'instructeur a dit que c'est la même chose pour les autres langues aussi.

c'était un peu irresponsable de l'instructeur. Certains d'autres langues ont la syntaxe similaire à Java pour définir des classes - notamment C ++. D'autre part, d'autres langues OO ont des syntaxes assez différentes, et certains n'utilisent même pas le terme "classe", beaucoup moins un mot clé avec cette orthographe.

J'ai appris une base de base en C. Quand j'ai ouvert le code :: blocks et dactylographie "classe" informatique en surbrillance

"classe" n'est pas un mot clé C, il est donc contre-productif de la mettre en surbrillance comme un code en C. Si tel est ce que Code :: Blocks faisait (pour un fichier .C), cela constituerait une faille. Mais si cela souligne que le mot comme identifiant (un nom de variable), il se comportait de manière raisonnable.

Et puis je l'ai compilé sans erreur.

... Mais avec des avertissements que vous ne mentionnez que plus tard:

AVERTISSEMENT: la définition de données n'a ni type de type ni de stockage
AVERTISSEMENT: Tapez les valeurs par défaut sur "INT" dans la déclaration de "classe" [-wimplicit-int]

Celles-ci vous disent que votre code est interprété différemment de ce que vous êtes probablement attendu.

Les deux sont liés. Ils vous disent que «la classe» est traité comme un indentificateur (d'une variable), pas comme un mot clé de langue. Ils vous disent en outre que le type de cet identifiant est implicitement attribué sous forme de int , qui est une caractéristique de compatibilité de GCC et d'autres compilateurs C. Depuis C99, une telle déclaration n'est pas valide en C, et si vous utilisez une option de compilation stricte (ER) -Conformance, telle que -std = C99 , le compilateur le rejetera.

Je sais que c N'EST PAS UNE LANGUE OOP afin de ne pas contenir de cours.

ne contient pas de classes de ne serait pas un moyen plus approprié de la former. Mais cela ne signifie pas que cela reconnaît le mot "classe" comme quelque chose qu'il devrait spécifiquement rejeter. Plutôt, cela signifie que le mot "classe" n'est pas reconnu comme quelque chose de spécial.


0 commentaires