Programming
C++ 中的 main 定义
新的 C++ 标准中 不允许给 main 指定 linkage-specification 了。
当然,考虑到原本 main() 也是 C 运行环境在开始运行程序的时候调用的, 而 C 运行环境自然也预期 C linkage,即不按照 C++ 的习惯对符号根据参数增加名字前缀, 因此大部分编译器在遇到 C++ 程序定义全局 main() 的时候也会按照习惯采取 C linkage 方式去翻译。这一规则首先被 GCC 采纳,随后 LLVM 也跟进了。
阅读全文…新的 arc4random_uniform 实现
本月初, Robert Clausecker 替换了 FreeBSD 的 arc4random_uniform(3)。
arc4random_uniform(3)
是 arc4random(3)
之上封装的一个生成一个较小范围伪随机数的函数。
arc4random(3)
采用密码学安全的伪随机数生成一个在 32-bit 范围,即 内均匀分布的伪随机整数,
此处的随机分布是依靠对称加密算法(目前采用的是 Chacha20)中用于实现加密的伪随机置换(Pseudorandom
Permutation)来保证的。
C main() 的 exit() 和 return
这里讨论一个犀利而无用的细节问题。事情的缘起是有人在 GitHub 上提了一个 pull request 要求把许多程序的
main()
的终结部分从 exit(X)
改为 return X;
,我反对了这一变动。
值得注意的是,在实践上,从 main
中 return
和调用 exit(3)
几乎等效的(此处还是有细微差别,
后面将会讨论),原因是 C 运行环境库的启动部分(这部分会在连接过程中嵌入到可执行文件中,
FreeBSD 的实现中,这部分位于 lib/libc/csu/libc_start1.c
的 __libc_start1
:
|
|
Moving toward a standarized qsort_r(3)
History of qsort_r(3)
First introduced in Research Unix V3 and eventually standardized as part of C Standard Library as of ANSI/ISO C89, qsort(3) provided an abstract interface where programmers can perform sort operation over an array of objects, by supplying a pointer to that array, the total number of the member objects, the size of individual member object, as well as a compare function. The compare function is expected to take two parameters, both pointers to a member object, and it shall return a negative number, 0, or a positive number, if the first object is considered smaller, equal, or greater respectively.
阅读全文…逗死我了......
对口相声选段:Node.js Is Bad Ass Rock Star Tech。
阅读全文…