labc-1ia@web-3g.berkeley.edu (Andrew M. Choi) (03/03/91)
Hi. This article is about the question of invoking a static function in another file through the use of pointer to function. Please consider the following: /* In file "foo.c" */ int (*function_pointer)(); static int function() { printf("This is from function\n"); } setFunctionPointer() { function_pointer = function; } /* In file "bar.c" */ main() { extern int (*function_pointer)(); setFunctionPointer(); (*function_pointer)(); /* Is this legal? Note that "function" */ /* is a static function .. unknown to */ /* "bar.c" */ } Personally, I think the above is *ALWAYS* legal (can't think of any reason why this will fail). Is this true for all machine architectures? I thank you in advance for your help. Name: Andrew Choi Internet Addr: achoi@cory.berkeley.edu Tel: (415)848-5658 #include <std/disclaimer.h>
henry@zoo.toronto.edu (Henry Spencer) (03/03/91)
In article <1991Mar3.002250.26164@agate.berkeley.edu> labc-1ia@web-3g.berkeley.edu (Andrew M. Choi) writes: >Hi. This article is about the question of invoking a static >function in another file through the use of pointer to >function... That is perfectly legitimate. If you can get a pointer to it, you can call it. "static" just means that the *name* is not visible outside the file where it is defined. -- "But this *is* the simplified version | Henry Spencer @ U of Toronto Zoology for the general public." -S. Harris | henry@zoo.toronto.edu utzoo!henry
pausv@sssab.se (Paul Svensson) (03/04/91)
henry@zoo.toronto.edu (Henry Spencer) writes: >In article <1991Mar3.002250.26164@agate.berkeley.edu> labc-1ia@web-3g.berkeley.edu (Andrew M. Choi) writes: >>Hi. This article is about the question of invoking a static >>function in another file through the use of pointer to >>function... > >That is perfectly legitimate. If you can get a pointer to it, you can >call it. "static" just means that the *name* is not visible outside the >file where it is defined. I had some fun(?) with this when (de)porting Hack to bsd 2.9... Henry is right, of course, but you shouldn't trust all C implementators to know this. CC on the pdp/11 did this wrong in one case; whe using overlays, functions declared static did not get a "thunk" in the base overlay, and when a pointer to a static function was passed off to someone in another overlay, using it there had interesting results :-) /Paul -- Paul Svensson _ /| - Every absurdity needs a champion to defend it - SM5SJS \'o.0' Scandinavian System Support Fax: +46 13 115193 paul@sssab.se =(___)= Box 535 _ Phone: +46 13 111660 sunic!sssab!paul U SE-581 06 Linkoping, Sweden Home: +46 13 121021