作者:丁冬
链接:https://www.zhihu.com/question/39263529/answer/80487228
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1.“永不返回”_Noreturn
_Noreturn void suicide() {
abort(); // Actually, abort is _Noreturn as well
}
2.编译期断言_Static_assert
_Static_assert(__STDC_VERSION__ >= 201112L, "C11 support required");
// Guess I don't really need _Static_assert to tell me this :-(
3.“宏函数重载”_Generic
#define GENERIC_ABS(x) \
_Generic((x), int: abs, double: fabs)(x)
// Uh, it's not necesarry to relate _Generic to macros...
4.内存对齐_Alignof/_Alignas
struct AlignedStorageForT {
_Alignas(_Alignof(T)) char storage[sizeof(T)];
// Problem is, we don't need a constructor
};
5.原子操作_Atomic
_Atomic int i; // Uh, may I just use atomic_int?
6.线程私货_Thread_local
_Thread_local static int i;
// Thread local isn't local!
=_=好吧,我只是来吐槽一下标准C的大头宝宝越来越多了...