HC4*_*ica 22 c generics overloading c11
我刚刚阅读了关于C11的维基百科文章,这是2011年12月发布的C标准的新版本,我看到其中一个增加的功能是"类型通用表达式":
使用
_Generic关键字的类型泛型表达式.例如,下面的宏CBRT(X)转换为cbrtl(X) ,CBRT(X)或cbrtf(X) 取决于类型X:Run Code Online (Sandbox Code Playgroud)#define cbrt(X) _Generic((X), long double: cbrtl, \ default: cbrt, \ float: cbrtf)(X)
这看起来非常糟糕 - 如果他们要改变语言,为什么不像C++一样添加函数重载?
Pot*_*ter 26
C具有一个外部符号的命名空间,并应用ODR(一个定义规则),使得extern两个转换单元中具有相同名称的两个对象必须具有相同的定义.
尽管可以创建支持重载的C ABI,但C的主要优势在于它的ABI简单性.在几乎所有平台上,"ABI"都是C ABI,无论源语言如何,它都在执行中扮演一些角色.如果符号必须包含类型信息,则会丢失.
TGE(由库使用)只是名称修改的手动操作版本.它确实(或将会在可能非常遥远的未来某个时间)完成它需要做的工作,允许typedef声明控制数学密集型内循环的生成.需要C++等语言功能的人应该移植到C++.