modernc.org/cc@v1.0.1/v2/testdata/cpp-expand/009.c (about)

     1  long __syscall(syscall_arg_t, ...);
     2  
     3  #ifndef __scc
     4  #define __scc(X) ((long) (X))
     5  typedef long syscall_arg_t;
     6  #endif
     7  
     8  
     9  #define __SYSCALL_CONCAT(a,b) __SYSCALL_CONCAT_X(a,b)
    10  #define __SYSCALL_CONCAT_X(a,b) a##b
    11  #define __SYSCALL_DISP(b,...) __SYSCALL_CONCAT(b,__SYSCALL_NARGS(__VA_ARGS__))(__VA_ARGS__)
    12  #define __SYSCALL_NARGS(...) __SYSCALL_NARGS_X(__VA_ARGS__,7,6,5,4,3,2,1,0,)
    13  #define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,h,n,...) n
    14  #define __sys_open(...) __SYSCALL_DISP(__sys_open,,__VA_ARGS__)
    15  #define __sys_open3(x,pn,fl,mo) __syscall4(SYS_openat, AT_FDCWD, pn, (fl)|O_LARGEFILE, mo)
    16  #define __syscall4(n,a,b,c,d) (__syscall)(n,__scc(a),__scc(b),__scc(c),__scc(d))
    17  #define sys_open(...) __syscall_ret(__sys_open(__VA_ARGS__))
    18  
    19  int fd = sys_open(filename, flags, 0666);