Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible/safe/sane to pass around a function pointer to a static function?

Let’s say I only want to expose a function from one of my files by passing out a function pointer to that function. Is it safe to declare that function as static? Are compilers allowed to do any judo that would invalidate my function pointer, or make it meaningless outside the context of that file, since the function is declared as specific to that file?

Not my code, but a (silly) example of what I mean:

void    static   cool_function(void);
void    extern (*cool_function_ptr)(void); // Actually, I’m not sure of where the `extern` goes in a function-
                                           // pointer declaration. Damn you, confusing function-pointer syntax!

Given that code (or the syntactically correct approximation thereof), would it be illegal to access cool_function_ptr from another file?

like image 816
ELLIOTTCABLE Avatar asked Feb 28 '11 04:02

ELLIOTTCABLE


1 Answers

It is completely safe to do so, and often useful. The same goes for static variables and data pointers. If the compiler wants to do any fancy optimizations (like nonstandard calling conventions, inlining, refactoring, etc.) that could interfere with the ability to call the function through a function pointer from a different translation unit, it's the compiler's responsibility to either determine that the address of the function is never taken, or to generate multiple versions of the code, one of which is safe to be called from outside with the standard calling convention.

like image 132
R.. GitHub STOP HELPING ICE Avatar answered Sep 20 '22 15:09

R.. GitHub STOP HELPING ICE