C语言有很多让人头疼的关键词,用不好容易踩雷。现在咱们就来聊聊这些暗雷的事儿,特别是有10个需要小心使用的东西,比如Flash、Linux、NULL还有RAM。 先说说goto这个“任意门”,老师们基本都禁止它。虽然它是C语言的一部分,但大部分公司都把它列为红线。这是因为水平不够的时候用它,代码可能变成“任意坑”,谁也不知道它会把程序带到哪里。早期程序员用它救急没问题,可代码量大了就容易出岔子。老师傅也反对它,因为可读性太差,就像寻宝游戏一样难找到正确的路径。调试的时候也麻烦,断点设不好很容易抓瞎。而且现在替代方案很成熟,何必冒险呢? 除了goto,extern也容易被滥用。extern本身没什么错,但要是用错了地方就会有大问题。比如把extern用来申明外部函数,编译器不会报错,可运行时接口一变就麻烦了。再比如单片机时代的嵌入式程序里全局变量满天飞。同一数字在10个文件里飘来飘去改起来麻烦,而且函数状态容易被打破边界。最后结果就是老员工成了不可替代的人,新人踩雷就跑掉了。 指针也是个双刃剑。空指针指的是NULL,解引用会导致段错误;野指针就是随机值,可能会改写堆表或者读到操作系统重启数据。所以解引用前一定要判断是否为空。 现在来看看公司级编码规范吧。禁止在C文件中用extern申明外部函数或全局变量;禁止八进制数;bit位变量移植性差,推荐boolean类型;uint和sint直接映射机器字长但容易溢出;指针算术仅限同一数组内;禁止整型与指针强制转换;数学运算前做溢出校验。 最后给大家一些建议:不熟悉的关键词先读三遍规范再动手;能用替代的就用替代的;先写安全代码再优化。希望大家都能写下永无bug的干净代码——这才是对goto、extern还有指针最好的致敬。