I appreciate any feedback, of course, I'm trying to learn here! About the snippets you mentioned, my reasoning was:
There's a variable outside of the functions scope. If the value of the global variable were changed before it's referenced in the function the outcome would change.
int global_int;
int is_not_reentrant(int x) {
int x = x; // An arbitrary operation
return global_int + x; // the result depends on global_int
}
In the second, the value of the global_int is copied into a variable within the function; so the result is no longer dependent on anything outside of the function's scope. My thinking was, that this demonstrated reentrancy.
int global_int;
int is_reentrant(int x) {
int saved = global_int;
return saved + x;
}
From the looks of it I did make a mistake, since it seems to be missing one of these criteria. I'll modify the snippets to fix it. Thanks! :)
+Must hold no static (or global) non-constant data.
+Must not return the address to static (or global) non- constant data.
-Must work only on the data provided to it by the caller.
+Must not rely on locks to singleton resources.
+Must not modify its own code (unless executing in its own unique thread storage)
+Must not call non-reentrant computer programs or routines.