c需要变量参数

时间:2012-03-13 16:39:39

标签: c++ unix g++ variadic-functions

我有一个功能

AddSprintf(char* , ... )

如果有人在没有两个参数的情况下调用它,我想编译时错误。 目前,如果有人打电话

AddSprintf("hello")

它有效。但我想禁用这样的呼叫。 有没有办法使用g ++我可以强制传递参数?

5 个答案:

答案 0 :(得分:7)

重载AddSprintf:

void AddSprintf(const char* , ... ) {}
void AddSprintf(const char*);

然后在编译AddSprintf("hello")

时会收到一条奇怪的错误消息

但请记住,使用C ++ 11时,您应该使用可变参数模板,因为它们是类型安全的。

答案 1 :(得分:0)

怎么样?
AddSprintf(char* , char*, ... ) 

答案 2 :(得分:0)

你不能,真的。点代表“零或多个参数”,并且无法知道是否存在任何参数。除了可能使用汇编程序并对堆栈指针进行一些检查。

答案 3 :(得分:0)

正如0A0D所说,它是可变参数 - 根据定义,编译器可以正常使用它。如果你希望它在编译时失败,你可能不得不采取措施 - 例如,如果你是单元测试,有代码使得函数失败并带有一个参数调用,这样新程序员就会知道他们做不到这一点。

那就是说,你为什么要这样做?您的问题可能有更好的解决方案。

答案 4 :(得分:0)

如果你想坚持使用相同的名称,那么你可以使用variadic宏:

#define AddSprintf(X,...) AddSprintf(X,__VA_ARGS__)

但要非常小心这个解决方案,因为AddSprintf在预处理阶段首先作为文本替换工作。然后只有它才是一个功能。