C Craft
a day ago
- 在GNU C中,大小为0的数组用作灵活数组,而C99支持类似功能但禁止显式声明零大小数组。
- 当零大小不被允许时,大小为1的数组可以模拟灵活数组,或通过类似指针的语法实现栈/堆接口的统一。
- 在宏中使用'do...while(0)'可确保在条件语句中包含的安全性;GNU C的表达式语句提供了替代方案。
- C语言的布尔逻辑返回0或1,这支持了Iverson括号用于简洁的条件表示,与C99的布尔类型形成对比。
- 标记指针利用对齐位存储元数据,解引用时需要掩码操作,但可能被过度优化。
- GNU C的嵌套函数提供了闭包功能,简化了如因数分解回调等API,尽管蹦床跳转可能受到限制。
- goto语句在特定情况下很有用,例如实现高效的虚拟机(计算跳转)、内层循环和协程。
- 通过文件作用域(不透明结构体)实现信息隐藏,分离接口与实现;暴露结构体可以优化性能。
- 内存映射文件允许通过数组直接访问文件,利用内核分页提高效率,并使用'die'函数处理错误。
- 小型语言(如表达式解释器)和元编程(代码生成器)扩展了C语言的能力,以解决特定领域问题。