2016-07-28 1 views
-1

Par exemple:Comment puis-je vérifier quelle expression est évaluée en premier dans C?

5*3 + 9*6 

Pour autant que je sache, selon les types de compilateurs dans certains 5*3 est évalué en premier tandis que dans d'autres compilateurs 9*6 est évalué en premier.

Y a-t-il une fonction dans C ou une technique qui permet de vérifier qui est évalué en premier?

+0

Pour MSVC https://msdn.microsoft.com/en-us/library/2bxt6kc4.aspx~~V~~3rd –

+0

J'ai aussi trouvé ceci: http://stackoverflow.com/questions/16530140/precedence-and-associativity -of-operators-in-c/16530162 # 16530162 and this http://stackoverflow.com/questions/7112282/order-of-evaluation-of-operands –

+3

Étant donné qu'il n'y a pas d'effets secondaires, quel sens a-t-il? "évaluer d'abord" une partie de l'expression ici? Si les règles de préséance sont observées lors de la combinaison des sous-expressions, l'ordre d'évaluation des termes n'est pas un phénomène observable (à moins d'intervenir dans l'ensemble généré avec un débogueur, mais la situation n'est pas aussi nette). –

Répondre

0

Y a-t-il une fonction dans C ou une technique qui permet de vérifier laquelle est évaluée en premier?

Vous pouvez définir une fonction pour multiplier les nombres et ajouter du code pour produire une sortie.

int multiply(int n1, int n2) 
{ 
    printf("Computing %d*%d\n", n1, n2); 
    return n1*n2; 
} 

et d'utiliser la fonction pour effectuer la multiplication au lieu d'utiliser l'opérateur de multiplication.

multiply(5, 3) + multiply(9, 6); 
+0

Ah, mais comment pouvez-vous garantir que le compilateur n'introduira pas tout le shebang et ne réordonnera pas les tirages avant (ou après) les multiplications? –

+1

@MatteoItalia, ce serait illégal car cela changerait le comportement observable du programme. –

+1

il n'y a rien d'observable lorsque l'arithmétique est effectuée, sauf si une écriture dans une variable 'volatile' est impliquée. Incidemment, dans ce cas précis, il n'y a pas besoin d'une multiplication d'exécution réelle, tout optimiseur valant quelque chose mettra simplement le résultat directement dans l'exécutable. –