在 C 中,我想创建一个如下所示的函数或宏:
void Log(char* what, ...)
其中 ... 必须是 const char* 的键值对。我真的很希望不遵循这一点的代码在编译时爆炸。我试图寻找执行此操作的 __attribute((..)) 指令,但无济于事。有什么想法吗?
最佳答案
C 无法对任意可变参数强制执行类型安全。 GCC 和 Clang 对某些固定情况有 __attribute__
(当可变函数期望最后一个参数为 NULL
时,您可以使用 __sentinel__
;或当它是一个格式字符串时,你可以使用 format
),但没有通用的解决方案。
另一方面,C++11 有可变参数模板来解决这个问题,但既然你提到你在用 C 工作,它对你不起作用。
关于c - 如何保证可变参数的类型安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21295651/