On 2020-11-05 12:59, John Naylor wrote: > I think we're talking past eachother. Here's a concrete example: > > #define BKI_ROWTYPE_OID(oid,oidmacro) > #define DECLARE_TOAST(name,toastoid,indexoid) extern int no_such_variable > > I understand these to be functionally equivalent as far as what the C > compiler sees.
The issue is that you can't have a bare semicolon at the top level of a C compilation unit, at least on some compilers. So doing
#define FOO(stuff) /*empty*/
and then
FOO(123);
won't work. You need to fill the definition of FOO with some stuff to make it valid.
BKI_ROWTYPE_OID on the other hand is not used at the top level like this, so it can be defined to empty.