2014-03-25 40 views
0

我在codegolf.stackexchange站點上找到了這段代碼。C,variadic函數和stdarg.h

#include <stdio.h> 
#define function int 
#define var int 
struct { int (*log)(const char *,...); } console = { printf }; 

/* From here on only JavaScript! */ 

function fac(x){ 
    if(x < 2) return 1; 
    return x * fac(x - 1); 
} 

function main(){ 
    console.log("Hello world!\n"); 

    for(var i = 0; i < 10; i++){ 
     console.log("%i! = %i\n", i, fac(i)); 
    } 

    return 0; 
} 

// *Should* we export the main function of this library??/ 
exports.main = main; 

我的問題是,怎麼會是他能跑,而不包括STDARG.H可變參數函數?

回答

4

因爲他不是操縱...參數,而是簡單地傳遞指針,該內部操縱...參數,該參數的情況下是一個的printf函數:

int __cdecl printf(const char *_Format, ...); 

注:並非所有編譯器支持__cdecl調用約定。

同樣,他定義的宏是毫無意義的,不應該在任何情況下使用,因爲它不是C.