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. p> Il n'y a pas d'erreur lors de la compilation, mais il y a quelques avertissements p>
3 Réponses :
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 ; code> comme
classe int; code>. Je suggère que si vous commencez à démarrer, vous devriez mettre un
-pedantic-erreurs -wall -wall code> dans les options de compilation afin que vous soyez protégé de ceci et d'autres comportements similaires. P>
C'est correct. La classe code> dans votre cas est une déclaration de la variable ayant la classe code> nom code>. Parce que vous n'avez pas spécifié le type, il est par défaut à
int code>. Comme il y a un avertissement, l'EDI met en évidence cette déclaration. P>
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. P> blockQuote>
c'était un peu irresponsable de l'instructeur. Certains em> d'autres langues ont la syntaxe similaire em> à 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. P>
J'ai appris une base de base en C. Quand j'ai ouvert le code :: blocks et dactylographie "classe" informatique en surbrillance p> blockQuote>
"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. P>
Et puis je l'ai compilé sans erreur. P> blockQuote>
... Mais avec des avertissements em> que vous ne mentionnez que plus tard: p>
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] p> blockQuote>Celles-ci vous disent que votre code est interprété différemment de ce que vous êtes probablement attendu. P>
Les deux sont liés. Ils vous disent que «la classe» est traité comme un indentificateur em> (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 code>, 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 code>, le compilateur le rejetera. P >
Je sais que c N'EST PAS UNE LANGUE OOP afin de ne pas contenir de cours. P> blockQuote>
ne contient pas de classes de em> 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. P>
"Je sais que c N'EST PAS UNE LANGUE OOP afin de ne pas contenir de cours." I> C'est vrai. En raison de cela,
classe int; code> est valide, car
class code> n'est pas un mot clé réservé, comme
foobar code> par exemple. L'avertissement indique qu'il tourne implicitement votre classe
; code> dans
classe int; code>.
> 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 code> 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 () code> doit être définie sur le type de retour
int code>, pas
vide code>. 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; code> a été exécuté.