2014-03-25 2 views
0

이 코드는 codegolf.stackexchange 사이트에서 발견되었습니다.C, 가변 인자 함수 및 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 호출 규칙을 지원합니다.

또한 매크로가 정의한 매크로는 무의미하므로 어떠한 경우에도 사용하면 안됩니다.