C语言宏:优雅地检测常量表达式

2025-05-13

本文探讨了在C语言中编写宏以检测表达式是否为编译时常量的多种方法。作者尝试了利用C23的`constexpr`和`typeof`、GNU扩展`__builtin_constant_p`、C11的`static_assert`、以及巧妙运用`sizeof`和复合字面量等技巧。这些方法各有优劣,有的需要较新的C标准支持,有的依赖编译器扩展,有的可能改变表达式的类型或产生警告信息。文章最后总结了这些方法的利弊,并表达了对更优雅解决方案的期待。

阅读更多

C语言宏:优雅地检测常量表达式

2025-04-22

本文探讨了在C语言中编写宏来检测表达式是否为常量表达式的多种方法。作者尝试了使用C23的静态复合字面量、GNU扩展的`__builtin_constant_p`、`static_assert`、`sizeof`结合复合字面量数组、`sizeof`结合枚举常量以及逗号运算符等方法。每种方法都有其优缺点,例如C23特性支持度不高,`__builtin_constant_p`依赖GNU扩展,`static_assert`和`sizeof`方法可能改变表达式的类型,逗号运算符会产生警告信息。最终作者得出结论,没有完美的方案,选择取决于具体需求和C标准版本。

阅读更多

用 BQN 征服 Advent of Code 2024

2025-01-25

作者参与了 2024 年的 Advent of Code 挑战,并选择学习 BQN 数组语言。文章详细记录了学习过程,包括环境搭建、文档和工具的使用体验,以及对 BQN 语言特性的介绍,例如其独特的运算符、数组操作和函数定义方式。作者还分享了几个 Advent of Code 题目解法,展示了 BQN 在处理数组和网格问题上的优势,并对比了 BQN 与命令式语言的差异。虽然初期学习曲线陡峭,但作者最终认为 BQN 是一种有趣且强大的语言,特别适合解决编程谜题。

阅读更多
开发 BQN

ChibiHash:小型快速 64 位哈希函数

2024-11-18

ChibiHash是一个小型快速的64位哈希函数,使用C语言编写,约60行代码。它性能优异,在大字符串吞吐量方面超过xxhash64、city64和spooky64等哈希函数。虽然cityhash在处理小于32字节的小字符串时速度更快,但ChibiHash具有良好的可移植性,不依赖硬件指令,并通过了smhasher测试,质量可靠。该函数通过异或、乘法和循环移位操作混合数据,并对加载8字节数据的方式进行了优化,以避免未定义行为。最后,它使用类似moremur的结束程序来保证良好的平衡性。

阅读更多
未分类

我为什么不喜欢strlcpy(3)

2024-07-15

本文分析了C语言中字符串拷贝函数strlcpy(3)的优缺点,并认为它并不是strcpy(3)和strncpy(3)的安全替代品。作者指出,在实际应用中,根据字符串截断需求的不同,使用memccpy(3)、memcpy(3)或strdup(3)等函数是更优的选择,并分别给出了具体场景下的代码示例和分析。

阅读更多
未分类 strlcpy