2011-04-30 4 views
2

J'ai trouvé la construction = {0}; dans cet exemple de code C, trouvé sur tidy.sourceforge.net Quelle est la rvalue de l'instruction et est-ce ANSI C?Quelle est la signification de = {0}; en C?

#include <tidy.h> 
#include <buffio.h> 
#include <stdio.h> 
#include <errno.h> 

int main(int argc, char **argv) 
{ 
    const char* input = "<title>Foo</title><p>Foo!"; 
    TidyBuffer output = {0}; 
    TidyBuffer errbuf = {0}; 
+2

C'est une "liste d'initialisation". Voir 6.7.8, par. 13 et suivants dans la norme C99. –

+0

@Steve Jessop, serait-ce légal ou illégal dans C90? – Sebastian

+1

c'est légal. L'initialisation est 3.5.7 dans le projet C89 que j'ai. Je pense que la numérotation des sections est la même en C90 mais je ne suis pas sûr. –

Répondre

5

Ce initialise tous les champs dans un struct, dans votre cas TidyBuffer, à zéros. La règle dans C est que vous pouvez omettre des membres dans une clause d'initialisation, et le reste sera initialisé à zéro. En C++, ceci est également légal:

TidyBuffer output = {}; 
+0

La même chose est admise pour le tableau aussi ..... – Pushpendra

+2

'{}' n'est pas une initialisation légale en C. (C'est légal C++.) La grammaire nécessite au moins un initialiseur; voir 6.7.8p1 en C99. –

+0

Je ne le savais pas; J'ai édité la réponse. Je ne saurais pas pourquoi quelqu'un dans son bon sens préférerait C au C++ cependant. :-) –

Questions connexes