c - 如何保证可变参数的类型安全?

标签 c variadic-functions variadic-macros

在 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/

相关文章:

C++ 如何在模板中推断 Callable 的类型(参数列表和返回值)

c++ - Clang 提示 POD 类实际上是非 POD

c++ - 可变参数宏中的模板推导失败

c - 如何锁定文件以进行 O_RDWR 的读写访问

c - 在数组中设置/取消设置 n 个连续位

c++ - Visual C++ 4.0 的正则表达式

java - 方法重载 - 对象与对象可变参数

c - 使用make生成c源的目标文件时如何生成依赖文件

c++ - 重载宏

c++ - 如何向 C++ 日志宏添加额外参数