9
votes

Que signifie le côlon dans les déclarations de structure en C?

lire le code de texmacs, j'ai vu ceci: xxx

qu'est-ce que cela signifie?

Cette syntaxe est définie dans C Standard , P113, mais je n'ai pas trouvé le sens de celui-ci, Mais c'est parce que je ne sais pas comment lire les règles de la grammaire.

parce que concrete_tructeur est un autre struct , qui contient des fonctions ressemblant à un constructeur et à un Destructeur virtuel, et parce que je lisa ailleurs qui classes en C ++ sont en réalité struct avec des membres publics par défaut, je suppose que c'est la façon de faire de l'héritage avec struct in c ( Parce que c'est la norme C ...).

est-ce correct?

c c++

4 commentaires

Si cela ne concerne qu'un problème C, vous devez supprimer la balise C ++. En C ++ que la déclaration a raison.


Cette syntaxe n'est pas définie dans la norme C ... Êtes-vous sûr de savoir comment lire les règles de la grammaire?


Juste, j'ai lu trop vite et j'étais sceptique que c'était aussi ... et oui, je sais comment lire les règles de la grammaire.


Et j'ai toujours attribué la structure à être c, je ne savais pas qu'il a été étendu en C ++. C'est pourquoi je l'ai délibérément marqué C et C ++.


4 Réponses :


3
votes

Êtes-vous sûr que c'est c?

Le document standard que vous avez associé ne décrit pas une telle syntaxe que je pouvais voir.

Ceci ressemble à C ++, où il est effectivement utilisé pour dire que la structure hérite une autre structure. page de compilation Texmacs vous recommande d'utiliser un compilateur C ++, qui ( Pour moi) implique que c'est écrit en C ++, pas c.

J'ai pris un look rapide dans l'archive Source Texmacs et j'ai vu beaucoup de fichiers ".CPP".


2 commentaires

N'avez-vous pas regardé le C Spec que les références de l'affiche, il est tout à fait correct ... Je suis également déconcerté par ce que la spécification essaie de dire cependant.


@BenJ: J'avais bien regardé, et je ne suis pas d'accord, il n'est pas correct. Voir la réponse de 246TNT.



24
votes

Il s'agit de la syntaxe C ++ et équivalente à ceci: xxx

Il s'agit de la syntaxe normale de l'héritage des classes, ici Texmacs_input_rep est héritée de concret_tructeur < /code >.

La norme C que vous avez liée à définir (6.7.2.1): xxx

Donc, selon C, il doit être struct , suivi d'un identificateur facultatif, suivi de {. Ou uniquement struct suivi d'un identificateur (une déclaration à terme). Dans aucun cas, il n'y a pas de place pour un supplémentaire: ... là-bas.

Le : mentionné ultérieurement dans ce paragraphe de la norme est à peu près binaire -Field Larths, comme celui-ci; xxx

ici A et b ne sont que 4 et 3 bits de large, mais c'est syntaxe différente de celle de la question.


0 commentaires

7
votes

GCC ne l'aime pas (en mode C bien sûr).

et en regardant la spécification, je ne vois pas cela défini à la page 113 (6.7.2.1), il est indiqué: < Pré> xxx

Quelle est la syntaxe des fitfields comme ceci: xxx

donc en résumé: ce n'est pas c, c'est c ++ et c'est héritier comme la classe héritage.


0 commentaires

2
votes

Le : dans le texte de la norme ne fait pas partie de la construction C. Il est là pour séparer la chose définie et sa définition.

Il n'y a pas d'utilisation valide du : dans une déclaration de structure.


0 commentaires