S170MIKO%HTIKUB5.BITNET@wiscvm.wisc.EDU (08/13/87)
Greetings all. After installing VAX C v2.3 I added prototypes and recompiled all my C-modules, and hit a clear bug with nested prototypes (really pointers to functions with prototypes). The following piece of code: void f1(void (*p1) (void)); typedef void (*func_t) (int); void f2(func_t p2) { (*p2)(5); } makes the compiler complain: { (*p2)(5); } INVCONVERT, The source or target of a conversion is noncomputational. At line number 4 in USER01:[S170.C]BUG.C;1. MISARGNUMBER, The number of arguments passed to the function does not match the number declared in a previous function prototype. At line number 4 in USER01:[S170.C]BUG.C;1. It compiles ok if a. lines 1 and 2 are reversed, or b. p1 and p2 differ in result-type, or c. the "5" in line 4 is left out, or d. the third "void" in line 1 is left out, or e. all three "*"s are left out (but then you can't call f2!); but leaving out "int" in line 2 of changing it to something else makes no difference. After some more trying it is clear that the compiler notices only the first prototype it sees for any type pointer_to_function_returning_foo and ignores all others. I hit this bug when compiling a module that contains a function like f2 above, and also #includes stdlib.h which contains the line int atexit(void (*func) (void)); ^^^^ I will of course SPR this problem, but I thought I'd let you all know first and invite comments/flames. My advice is not to use function prototypes with pointer_to_function yet (and hence no nested prototypes), and to change stdlib.h (remember: even if you don't use prototypes, you're still in trouble if you use pointer_to_function_returning_void). I'm posting this message to INFO-VAX and INFO-C: sorry if you see it twice. Michiel ---------------------------------------------------------------------- Michiel Koren EARN/Bitnet: s170miko@htikub5 Tilburg University SURFnet: kubvx1::s170miko Netherlands PSI-mail: PSI%+204 1420061 0610::s170miko Phone: +31 13 662559 Papernet: P.O.Box 90153 5000 LE TILBURG ----------------------------------------------------------------------