Sans fournir de code supplémentaire pour stocker le paramètre pendant le site "dernier l'appel à votre fonction, il n'y a aucune chance de détecter si elle a été appelée avec la même valeur ou une autre.
Comme le actuel La valeur de x vivra sur la pile mais elle sera complètement perdue une fois que votre appel de fonction sera terminé.
Dans le pré-multi-threading ère simplement en utilisant une variable statique pour mettre en cache la valeur de x lors de la dernière exécution de votre fonction. func
pourrait (presque) avoir résolu votre problème :
void fun (int x) {
static int old_value = VALUE_INVALID;
if(x != old_value)
printf("VALUE OF X IS DIFFERENT THAN PREVIOUS CALL \n");
old_value = x;
}
Le seul problème qui subsiste avec cette approche est la ré-entrance - ce qui signifie que la valeur mise en cache peut être altérée si func
est appelé dans un gestionnaire de signaux.
Si l'on fonctionne dans un multithreading application vous devez en outre prévoir une sorte de mécanisme de verrouillage lorsque vous utilisez cette approche, sinon vous vous retrouverez tôt ou tard dans la merde.
Il est probable que vous serez de toute façon dans l'embarras dans ce scénario, car vous devrez clarifier ce qui suit "dernier appel à la fonction et à la valeur pendant exécution signifie exactement.
La bonne valeur actuelle est-elle celle du thread A qui est entré dans func avant le thread B mais qui est toujours en train de s'exécuter ou celle du thread B qui est entré après B mais qui a déjà terminé l'exécution de func ?