开始捣鼓这两个st
这事儿,还得从我前两天写代码说起。那天晚上临睡前,我吭哧吭哧调试一个功能,死活跑不通,控制台里老是报错,连着几个单词里都带着“st”,看得我眼花缭乱。我一开始也纳闷儿:这俩不都是“st”吗?能有啥区别? 折腾到后半夜,查了好半天资料,才猛然发现,原来这俩玩意儿根本不是一回事!
我的踩坑现场
我当时在一个处理数据的脚本里,想整一个计数器功能。我记得有些语言里用“st”代表某种状态或者设置来着。我就很顺手的写了俩,心想总有一个蒙对?结果运行起来直接傻眼。
- 第一个st:我顺手敲了个
int st = 0;想当计数器。编译啥的都过了,但运行结果乱套了。 - 第二个st:我以为第一个写短了,搞了个长的
struct DataSet st;。好嘛这回编译就报错了,说“不认识这玩意儿”。
当时困得不行,看着满屏幕红彤彤的报错,我那个火气蹭蹭往上涨,这什么破玩意儿!咋这么欺负人?
硬着头皮搞明白
实在没办法,跑去翻官方文档和一堆资料,对着代码一行行瞅。终于看懂了:
- 第一个st:我写
int st = 0;里的这个“st”,完全是我瞎编的名字! 意思就是说,“st”在这里屁都不是,它只是我给那个整数变量随便起的小名儿,叫“狗剩”或者“铁柱”都没毛病。它存在的意义就是我让它当计数器。 - 第二个st:那个
struct DataSet st;里的“struct”,这玩意儿可是正经关键词!相当于一个打包快递的盒子。我想的是:“给我找个叫‘DataSet’型号的快递盒子来,我还给这个盒子起了个小名叫‘st’方便我搬”。但问题出在,我根本没提前定义过“DataSet”这个型号的盒子!系统懵了:“你让我去哪儿找这种盒子?不认得!”
简单粗暴总结:第一个“st”是我瞎起的绰号;第二个“st”是我给一个根本不存在的、叫“DataSet”的东西(关键词struct)瞎起的绰号!俩都是瞎起名,但第二个名儿里的“struct”本身是系统关键词,我没用明白就翻了车。
搞懂之后的应用
整明白这个区别之后,我赶紧爬起来去厨房泡了碗面,一边吸溜一边改代码。
- 瞎起名那个st:就是个变量,想咋用咋用,只要我记住它是计数器就行。
- 关键词相关的st:我老老实实先把“DataSet”这个盒子型号定义清楚了,告诉系统这盒子长啥样儿能装然后才写
struct DataSet myData;,这回没叫“st”,改叫“myData”,更清楚点儿。
改完一运行,成了!数据规规矩矩躺在“myData”这个盒子里。
那点想法
搞半天差点把自己搞崩溃,就因为两个“st”长得像。说白了,第一个“st”就是路边捡块石头随便叫它“宝贝”,第二个“st”是我试图拿一块根本不存在的“和氏璧”去给石头命名还妄想它变真玉! 名字是自己起的,但起名之前得看看你要起名的那玩意儿到底是是块石头还是个特定的宝贝(关键字),尤其那个宝贝到底存不存在(有没有定义)。编程里这种看着像、实际天差地别的东西,真是能坑死人,下次再看到眼熟的字母组合,我可不敢想

还没有评论,来说两句吧...