在 C++ 的程序中,不能用 scanf 作为变量名。
这道题考的是C++标识符规则与绝对化表述陷阱。拿到题先别急着背结论,想想scanf是不是关键字,再回忆C++标准里哪些名字被严格保留,最后判断‘不能用’这种说法是否太绝对。
大部分同学会选A,因为平时做题总被提醒‘不要和库函数重名’,就下意识把scanf当成保留字了。其实C++只保留真正关键字,scanf只是普通函数名,完全合法。还有人会纠结‘会不会和头文件冲突’,以为用了会报错,其实只要在代码里声明了变量,编译器只认局部作用域,不会出错。
【考点】C++标识符规则|scanf函数名与保留字区别|绝对化表述陷阱
考纲定位:本题位于GESP一级‘识别C++变量名与关键字’考点,专门考察‘标识符与关键字’这一核心知识点。命题人把‘scanf’这个函数名伪装成‘绝对不能用’的陷阱,卡住的是死记硬背的考生——他们误以为所有库函数名都是保留字,却忘了C++标准里只有真正的关键字(如if、while、main)才禁止复用。
解题思维:看到题先想‘scanf是不是关键字?’——查C++标准,它不是关键字,只是cstdio头文件里的函数名。因此它完全可以用作变量名,只要不产生符号冲突即可。通法:遇到‘某函数名能否当变量名’的题,先核对是否为关键字(查保留字表),再考虑是否会被宏展开或头文件污染,最后判断命名空间。
陷阱拆解:A选项‘正确’是典型绝对化表述陷阱。命题人利用‘scanf是库函数’这一常识,诱导考生把‘函数名’等同于‘保留字’。其实C++只保留真正关键字,scanf不在其中,所以‘不能用’是假命题。如果你只背结论、不理解本质,就会掉进这个陷阱——以为所有函数名都禁用了。
反命题思维:如果把题干改成‘main’或‘if’,答案立刻变正确,因为它们是真关键字。反之,若改成C语言环境,scanf仍可用,因为C++允许。刷到类似题时,先问自己:‘命题人想考我什么?是关键字规则、头文件污染,还是绝对化表述?’这个思考链能帮你一眼拆穿套路。
考频趋势:基础语法在题库中占比极高(1295题),其中GESP一级就考了332题,2023年单年就有287题,2024年413题,2025年401题,说明这类‘绝对化’陷阱是命题人近年最爱挖的坑。变量与常量考点共77题,GESP一级占40题,基本都在考‘能不能这么写’;基本数据类型267题,GESP一级81题,也常结合关键字规则出题。
预测:基于数据,未来GESP一级和二级仍会高频出现‘某函数/宏名能否当变量名’的判断题,命题人大概率继续用scanf、printf、malloc等常用库函数做幌子,专挑那些‘看似像关键字’的名字下手。考生需牢记:只有C++标准保留字表里的词(约60个)绝对不能用,其余函数名、宏名、全局变量名(除非是全局且未加命名空间)都可以当局部变量用。