C 语言中统一的函数指针
这篇讲的是C语言函数指针的一个常见痛点:不同类型函数的指针无法统一赋值和传递。作者从代码维护的现实困境出发,指出像 `void(*)(int)`、`int(*)(char, float)` 这些看似结构相同的指针类型,在C语言里却无法直接互相赋值或放入统一容器,这给编写通用代码带来了麻烦。 文章接着聚焦于C23标准引入的“统一函数指针”特性。它展示了一种全新的声明语法,例如使用 `[[gnu::unified]]` 属性,或者更直接的 `void (*)(int)` 配合新的调用约定,能够创建一种“万能”的函数指针类型。这种指针可以隐式地与任何签名兼容的普通函数指针相互转换和赋值。 作者通过对比新旧代码,清晰地展现了差异:以往需要通过 `void*` 类型擦除和强制转换才能实现的通用回调模式,现在可以用统一函数指针安全、直观地完成。这不仅让代码更简洁,也从根本上避免了因类型转换引发的潜在运行时错误。对于需要实现插件系统、回调机制或泛型容器的项目而言,这一特性显著提升了代码的健壮性和可读性。