Python 预声明常量的怪异行为Python 有6个预声明常量,但行为各不相同:True/False/None 是词法关键字,debug 是唯一不可赋值的普通标识符,Ellipsis 和 NotImplemented 却可以被全局变量覆盖。 更奇怪的是,即使通过 setattr 修改 builtins 模块,True/False/None/debug 的值也不会改变,而 Ellipsis 的内置名可以被覆盖但字面量... 不会。 评论点赞收藏35 天前
Python 字符串字面量的有趣之处Python 的原始字符串不能以反斜杠结尾,f-string 花括号内可以写注释和多行表达式。原始字符串仍按普通字符串词法解析,末尾反斜杠会导致语法错误;f-string 花括号内调用完整 Python 解析器,支持注释、引号和多行,但 lambda 和赋值表达式必须加括号。 评论点赞收藏55 天前
C 语言中 sizeof 的解析 surprisingly 复杂C 语言的 sizeof 解析比想象中复杂得多——操作数可以是表达式或括号包裹的类型名,但复合字面量让情况变得棘手。sizeof(int){0} 是合法代码,sizeof(int)+1 是加法而非强转,解析器需要特殊处理这些边界情况。 评论点赞收藏59 天前
GCC和Clang均不符合C++标准C++标准规定不同语言链接(如extern "C"与默认C++)的函数类型应视为不同类型,但GCC和Clang均未在类型系统中存储此信息,导致类型检查失效及重载冲突误报。 作者指出问题根源在于标准定义不当,编译器因ABI兼容性无法更改行为,且主流平台上C与C++调用约定实际相同。 评论点赞收藏72 天前
NaN 的两个案例研究:Python 与 Lua 中的隐蔽陷阱NaN 在 Python 列表比较和 Lua 数值循环中表现出违反直觉的行为。Python 因身份优化导致 [nan]==[nan] 为真,Lua 循环则因比较逻辑漏洞产生不可预测的迭代次数。 这些案例揭示了语言设计中对 NaN 特殊性的忽视及底层实现细节如何泄露到语义层。 评论点赞收藏82 天前