2009-11-06 17 views

Répondre

3

Mauvaise réponse

... avec un nouveau droit Réponse ci-dessous.

int main(void) 
{ 
} 

La paire de bretelles dans la définition de main est un composé énoncé qui est l'une des formes valides pour un état .

Edit: même si une instruction peut être un composé énoncé , et une fonction du corps est constitué d'un composé énoncé , lorsque le composé-instruction est une fonction du corps , ce n'est pas une déclaration .

Edition, Edit:

Ce programme ne contient une déclaration qui est exécutée, si:

int main(void) 
{ 
    if (1) {} 
} 
+1

Hmm, ne voyez pas une déclaration ici - juste une déclaration et une fonction vide corps. – caf

+3

Un corps de fonction est constitué d'une instruction composée. –

+0

Le corps si principal est une instruction (composée) selon la grammaire C. –

10

Cette ligne est une déclaration:

while (0) { } 
+4

comment 'bout 'while (1) {}'? Au moins, vous avez du travail :) –

+4

@Martinho: trop fatigant. –

+0

Et il y a un autre fait intéressant sur le '1' vs' 0'. Celui avec le '0' peut être optimisé à rien, alors que celui avec le '1' ne le peut pas. –

8

Vous pouvez une expression dans un if() tant qu'elle évalue un scalaire (entier, point flottant t nombre ou pointeur).

if (expr, 0) {} 

Selon la grammaire C, expr est une expression. if(expr){} est un selection_statement, donc cela correspondrait à la facture.

Notez que le ,0 n'est pas toujours nécessaire puisque le corps du if() est vide. Donc, ces déclarations seraient équivalentes, si expr renvoie un scalaire:

if (expr) {} 
while (expr, 0) {} 
while (expr && 0) {} 
while (expr || 0) {} 

Tous évaluerait une fois l'expression.

+1

Cela ne fera pas une déclaration, mais une expression. Le tout (le si et les accolades), est une déclaration, cependant. –

+0

N'est-ce pas une fonction appeler une instruction, aussi? –

+0

lorsqu'il est utilisé dans une expression, il s'agit d'une expression. –

3

Utilisez cette fonction:

__asm { 
    mov al, 2 
    mov dx, 0xD007 
    out dx, al 
} 
+6

Pas une instruction C, mais une directive de compilateur propriétaire. – gnud

1
if (i=2) {} // give `i` a value 
2

{ }

Au moins 15 caractères sont requis pour poster une réponse ...

1

programme Même tout (mon GNU C construit malgré le code résultat renvoyé est indéfini). La question est POURQUOI?

/* NEVER DO THIS!!! */ 
int main() 
{ 
    {} 
} 

Et en C++, nous pouvons même stabiliser le code de retour par ce simple truc de la pile avec la variable (oui, il est sale, je comprends, mais je pense que cela devrait fonctionner pour la plupart des cas):

/* NEVER RELY ON SUCH TRICKS */ 
int main() 
{ 
    if (int i=0) {} 
} 
+0

le pourquoi est rétrocompatibilité, je suppose. Il va juste émettre un avertissement. –

+0

Oups ... devrait être «pourquoi nous devrions coder quelque chose comme ça» ... –

+0

+1 pour le tour de pile. –

1
int main() 
{ 
    // This executes a statement without a semicolon 
    if(int i = 10) 
    {  
    // Call a function 
    if(Fibonacci(i)) {} 
    } 

    // I have made my point 
    return 0; 
} 

int Fibonacci(int n) 
{ 
    return (n == 2) ? 1 : Fibonacci(n - 2) + Fibonacci(n - 1); 
} 
0
#define _ ; 

int main() 
{ 
    return 0 _ 
}