7
votes

Étiquette et nom de structure, pourquoi une variable locale déclarée est-elle compilée?

Dans certains codes, j'ai vu récemment une structure définie comme ceci: xxx

la manière dont je comprends cela, tagmystruct est le nouveau type de données et Muntruct est une variable créée ici.

à un autre endroit, ceci a été utilisé comme ceci: xxx

et il a compilé Fine avec Visual Studio 2010. Comment est-ce valide C ++? Je pensais muntruct était une variable et non un type?


0 commentaires

3 Réponses :


3
votes

Vous vous trompez, vous utilisez typedef code>, i.e. muntruct code> est un alias pour tagmystruct code>. Cela explique comment il est correct C ++.

Pour créer une variable, déposez le TypeDEF: P>

struct tagMyStruct {
    int numberOne;
    int numberTwo;
} MYSTRUCT;


1 commentaires

Ce sont des alias muntruct et TagMystruct uniquement en C ++ pas en C



9
votes

non. TagMystruct code> est le nom de la structure. Dans C, contrairement à C ++, vous devez utiliser explicitement le mot clé STR de struct chaque fois que vous utilisez le type de structure. Par exemple xxx pré>

pour éviter d'écrire la structure tout le temps, struct tagmystruct code> est typedef code> 'd to muntructeur code> . Maintenant, vous pouvez écrire P>

MYSTRUCT* pStruct = new MYSTRUCT; //valid C++ (invalid C - use malloc instead of new in C)


2 commentaires

@ Bastibechtold: Ce n'est pas une ampersand. C'est un astérisque. Ampersand est & :)


Depuis quand est "nouveau" valable en C? En outre, il convient de souligner que cette utilisation de Typedef est inutile et généralement une mauvaise idée en C ++, exactement parce que C ++ ne nécessite pas d'utiliser le mot clé struct dans le cadre de la Tapez le nom de la manière que ctive. (Bien que parfois vous êtes coincé avec elle parce que vous êtes inter-opérant avec le code C Hériacy.)



6
votes
typedef tagMyStruct struct { ... } MYSTRUCT;

0 commentaires