败犬日报 2024-12-30
1. 研究未定义行为是初学者学习 C++ 不可缺少的一环
大部分人都是先遇到了 UB(未定义行为)这个现象,然后才正式的学习什么是 UB。应该引导他们正确地学习。
2. 宏里的变量名和宏外一致导致 bug
cpp
#define CHECK(cmd) { int r = cmd; /*......*/ }
CHECK(func(a, b, c, r));
这段代码展开后是:
cpp
{ int r = func(a, b, c, r); /*......*/ }
r 的初始化使用了未初始化的变量(就是 r 自己),而这个问题在编译器不会报错(-Wall
会有警告)。
由于宏只是简单的文本替换,会有命名空间问题,这是宏的缺陷之一。
解决方法自然是:在宏里使用一个不会和外部变量冲突的变量名。
3. 一段密文
https://www.luogu.com/article/u9rata68 里的第 7 个,长这样:
text
/*
# Wfz chf-jze
> Ctv xrmu govoh ulbc fpfn zsz esn ambdjok uljb cmyt, M iewn umgtfe fxez. Kcu, jx jw fpabi sfeijrh.
BGS, airdq prjhmsbpmh line gvtn BOL (Bwbz Kssn uqm Kfzftsh -> ojvf yu), ojwimlz, jwiocvjtmy, hjgmojuntz, derf ux vg mjoh xlfw R gistx migc cpf fyerjrbcjxv asfe pj LTY-T 3169. Bludimlz, spx cin uinf qfju, rb wbt yii cjvm tibx fbbv bbbrufh.
...
python + nltk
答案是 1145141919810 依序凯撒加密(空格不跳过)。
cpp
> Ctv xrmu govoh ulbc ...
114514191981011451419 ...