Orden de evaluación de los operandos

Considere el siguiente programa. 
 

C++

// C++ implementation
#include <bits/stdc++.h>
using namespace std;
int x = 0;
 
int f1()
{
    x = 5;
    return x;
}
 
int f2()
{
    x = 10;
    return x;
}
 
int main()
{
    int p = f1() + f2();
    cout << ("%d ", x);
    getchar();
    return 0;
}

C

#include <stdio.h>
int x = 0;
 
int f1()
{
    x = 5;
    return x;
}
 
int f2()
{
    x = 10;
    return x;
}
 
int main()
{
    int p = f1() + f2();
    printf("%d ", x);
    getchar();
    return 0;
}

Java

class GFG {
 
    static int x = 0;
 
    static int f1()
    {
        x = 5;
        return x;
    }
 
    static int f2()
    {
        x = 10;
        return x;
    }
 
    public static void main(String[] args)
    {
        int p = f1() + f2();
        System.out.printf("%d ", x);
    }
}
 
// This code is contributed by Rajput-Ji

Python3

# Python3 implementation of the above approach
class A():
    x = 0;
 
    def f1():
        A.x = 5;
        return A.x;
 
    def f2():
        A.x = 10;
        return A.x;
         
# Driver Code
p = A.f1() + A.f2();
print(A.x);
 
# This code is contributed by mits

C#

// C# implementation of the above approach
using System;
 
class GFG {
 
    static int x = 0;
 
    static int f1()
    {
        x = 5;
        return x;
    }
 
    static int f2()
    {
        x = 10;
        return x;
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        int p = f1() + f2();
        Console.WriteLine("{0} ", x);
    }
}
 
// This code has been contributed
// by 29AjayKumar

PHP

<?php
// PHP implementation of the above approach
$x = 0;
 
function f1()
{
    global $x;
    $x = 5;
    return $x;
}
 
function f2()
{
    global $x;
    $x = 10;
    return $x;
}
 
// Driver Code
$p = f1() + f2();
print($x);
 
// This code is contributed by mits
?>

Javascript

<script>
x = 0;
 
function f1()
{
    x = 5;
    return x;
}
 
function f2()
{
    x = 10;
    return x;
}
 
 
var p = f1() + f2();
document.write(x);
     
// This code is contributed by Amit Katiyar
</script>

Producción: 
 

10

¿Cuál sería la salida del programa anterior: ‘5’ o ’10’? 
La salida no está definida ya que el orden de evaluación de f1() + f2() no es obligatorio por estándar. El compilador es libre de llamar primero a f1() o f2(). Solo cuando aparecen operadores de precedencia de igual nivel en una expresión, la asociatividad entra en escena. Por ejemplo, f1() + f2() + f3() se considerará como (f1() + f2()) + f3(). Pero entre el primer par, qué función (el operando) evaluada primero no está definida por el estándar. 
Gracias a Venki por sugerir la solución.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *