C,可变函数和stdarg.h

时间:2014-03-25 21:56:56

标签: c variadic-functions

我在codegolf.stackexchange网站上找到了这段代码。

#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的情况下运行可变参数函数?

1 个答案:

答案 0 :(得分:4)

因为他没有操纵...参数,只是简单地将指针传递给内部操作...参数的函数,在这种情况下是printf:

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

注意:并非所有编译器都支持__cdecl调用约定。

此外,他定义的宏是毫无意义的,不应该在任何情况下使用,因为它不是C.