J'ai vu cela dans certains C code C: Qu'est-ce que la diable signifie cela signifie? p> p>
3 Réponses :
Ce code est l'initialisation d'un Cette astuce est une APIS relativement courante dans Win32 - l'API nécessite que la taille soit prédéfinie comme moyen d'indiquer la version du code cliente à compilation - dans bon nombre de ces cas, on devrait également effacer le tampon, qui impliquerait normalement un appel séparé à par exemple struct code> à l'aide de la syntaxe d'initialisateur Funky C pour initialiser chaque champ par ordre de déclaration, voir http://www.informit.com/guides/content.aspx?g=cplusplus&seqnum=421 . Un effet secondaire important dans le cas de cet exemple est que les champs restants, on ne spécifie pas les valeurs pour être initialisées à Zeros. P>
MEMSET CODE> avant d'initialiser le champ de taille avec la taille
de code>. p>
C'est un Expression initiale qui définit le premier champ de w code> à
Tailleof (wininfo) code> et les autres champs à zéro. P >
+1 (et a volé la plus grande partie de la réponse à faire beaucoup moins incomplète: p)
Premièrement, ce n'est pas une déclaration, c'est une déclaration. Les déclarations ne sont pas des déclarations dans C
Deuxièmement, le quoi Exactement votre moyen de déclaration spécifique dépend de ce que = {/ * Peut * /} code> partie est un em> initialiseur em> - elle spécifie la valeur initiale d'un objet. Normalement, vous utilisez des initialisateurs joints dans
{} code> pour initialiser les objets agrégés: tableaux ou structs. Cependant, une caractéristique peu connue du langage C est que les initialisateurs d'objets scalaires peuvent également être éventuellement joints dans
{} code>, comme dans p>
wininfo code> est. Si
w code> est un agrégat, son premier membre est initialisé par
Tailleof (WinInfo) code> la valeur et le reste est initialisé avec des zéros. Si
w code> est un scalaire, il reçoit simplement la valeur initiale de
Tailleof (wininfo) code>. P> p>
Comme il comprend une initialiseur, ce n'est pas juste une déclaration, mais une définition.
La définition est toujours une déclaration. Donc, il contexte lorsque la distinction n'a aucune importance, le terme la déclaration i> est normalement utilisé. L'élément syntaxique est toujours appelé Déclaration i>. Les définitions n'existent que au niveau de la sémantique.
+1: Nice et complète (@nos: C'est ce que j'étais en train de pêcher quand on menait redondant)