上周晚自习对着Dev-C++敲代码,反复运行都弹出红色报错框,盯着代码看了快半小时,才反应过来自己一直没搞懂c语言非法字符有哪些,敲进去的符号全踩在了编译器的红线里。当时写的是学生成绩计算程序,变量定义一行刚写完,编译器直接标红整行,弹窗提示无法识别的字符,起初还以为是软件本身出了故障,关掉重启两次,报错依旧没有消失。
输入法的半角全角切换是最容易踩中的雷区,当时写代码习惯性切到中文输入模式,分号、大括号、等号全部打出了全角样式。中文全角的分号看着和英文分号差距不大,可编译器完全不认这类符号,但凡代码里混入一个,整段代码都会直接停止编译。同桌当时凑过来看我的代码,随手敲了个英文分号替换掉全角符号,程序瞬间就清除了报错,那一刻才看清两种符号的细微差别。
全角空格也是藏得很深的非法字符,写代码时为了看着整齐,刻意在变量名前后敲了几个中文空格,代码界面上看着排版舒服,编译阶段却直接触发报错。那段代码反复修改逻辑,更换变量名称,始终找不到问题源头,直到把每行代码末尾的空白全部删除,编译才顺利通过。后来才反应过来,C语言只认可英文半角空格,中文输入法输出的空格属于程序无法识别的非法字符。
不少特殊符号也会被判定为非法字符,编写循环语句时随手打了人民币符号¥,本意只是标注成绩满分数值,代码刚保存就弹出报错提示。书本上只标注了基础标点不能混用,没有细说各类特殊符号的限制,自己当时也没多想,随手输入的符号直接拖慢了代码调试进度。还有手写输入自带的破折号、书名号,但凡出现在代码编写区域,都会被编译器归类为非法字符。
中文汉字出现在代码标识符里同样属于非法字符,当初偷懒没有用英文命名变量,直接写了分数、总分这类中文,编译器全程标红,完全无法运行。哪怕只是注释外的单个汉字,都会触发字符识别错误,后来把所有中文变量名替换成score、sum这类英文单词,代码的报错提示才彻底消失。
折腾好久才搞明白,很多新手写代码时不会留意输入法状态,连续打出全角符号、中文特殊符号,这些符号全部归为C语言的非法字符,编译器不会自动识别,只会直接中断编译流程。写代码前一定要把输入法切到英文模式,写完一段代码后快速扫视一遍符号,避开全角标点和各类中文特殊符号,就能减少大半编译报错。
那天放学留在机房修改代码,反复更换输入法测试不同符号,盯着编译窗口反复调试,直到晚自习下课铃声响起,才把所有隐藏的非法字符全部清理干净。关掉软件界面的时候,指尖还残留着反复敲击键盘的酸胀感,心里只懊恼当初没有提前留意输入法的切换状态。