Poster un exemple pour exécuter une instruction « C » sans virgule (;)Est-il possible d'exécuter un « C » déclaration sans un point-virgule
Répondre
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) {}
}
Hmm, ne voyez pas une déclaration ici - juste une déclaration et une fonction vide corps. – caf
Un corps de fonction est constitué d'une instruction composée. –
Le corps si principal est une instruction (composée) selon la grammaire C. –
Cette ligne est une déclaration:
while (0) { }
comment 'bout 'while (1) {}'? Au moins, vous avez du travail :) –
@Martinho: trop fatigant. –
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. –
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.
Cela ne fera pas une déclaration, mais une expression. Le tout (le si et les accolades), est une déclaration, cependant. –
N'est-ce pas une fonction appeler une instruction, aussi? –
lorsqu'il est utilisé dans une expression, il s'agit d'une expression. –
Utilisez cette fonction:
__asm {
mov al, 2
mov dx, 0xD007
out dx, al
}
Pas une instruction C, mais une directive de compilateur propriétaire. – gnud
if (i=2) {} // give `i` a value
{ }
Au moins 15 caractères sont requis pour poster une réponse ...
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) {}
}
le pourquoi est rétrocompatibilité, je suppose. Il va juste émettre un avertissement. –
Oups ... devrait être «pourquoi nous devrions coder quelque chose comme ça» ... –
+1 pour le tour de pile. –
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);
}
#define _ ;
int main()
{
return 0 _
}
Qu'est ce que c'est? Devoirs? –
Ce n'est pas une bonne question .. s'il vous plaît soyez plus précis! void main (void) {} - Une instruction sans ';' – Shirkrin
@Shirkrin: Définition de la fonction! = Instruction –