4 ms·
> but you can access the function version if you want, e.g. in glibc, getc() will call the macro, while (getc)() will call the function. Are you sure about thi
by nuxi 16y ago
> but you can access the function version if you want, e.g. in glibc, getc() will call the macro, while (getc)() will call the function.
Are you sure about this?
- JoachimSchipper 16y agoYes (the macro must be define as #define getc(stream) ... of course, but that's the only legal definition anyway). ("Free-standing implementations" like kernels have a lot of freedom to muck with the standard library. But that's not really relevant.)
- nuxi 16y agoAh okay, I understand what you meant now. One thing however - if it is a macro, couldn't it just be: #define getc fgetc_or_similar At least C89/90 only mentions that if it is a macro, it may evaluate arguments more than once (but then it may not, as in the above case).
- JoachimSchipper 16y agoYes and no. Yes, that is a valid #define; but the following program must work: #include <stdio.h> #undef getc int main(void) { getc(stdin); return 0; } so it cannot be implemented as only a macro.