百科问答小站 logo
百科问答小站 font logo



为什么 C 语言不允许注释嵌套? 第1页

  

user avatar   Ivony 网友的相关建议: 
      

好吧,本来不打算回答这个问题的,可是有个除了名词啥也不懂的家伙,不仅仅一个劲儿嘚瑟的展现其才华,还自以为啪啪的给别人打脸,实在是,不得不说两句。

@邱昊宇

的答案,我认为有一定的道理,如果注释不支持嵌套的话,那么一个正则文法的词法分析器就搞定了。不过我觉得可能原因也没有这么复杂,既然是注释,注释内的所有文本都被视为注释而被编译器无视之,凭什么注释内的/*,也就是注释开始符号要特殊对待呢?这种语法在设计和实现上都会变得更为复杂


致眼神不好的用户,请注意上面粗体字即为我对这个问题的答案。


接下来是某人的打脸秀:


首先我们看这个家伙的逻辑:

词法分析是预处理器的一部分

所以呢?

所以预处理器可以处理意味着词法分析处理没问题?

CPU是电脑的一部分,所以电脑可以播放美国大片意味着CPU播放美国大片也没有问题?

这种逻辑还怎么做程序员啊?


预处理器是C语言的一个特色,但是就算是预处理器,也是先对预处理指令、宏和注释等进行语法分析,在这其中自然就包含了词法分析。而如果注释不支持嵌套,那么注释就可以直接用简单的词法分析器搞定,而不用先解析出/*和*/,再在语法分析时去处理。

就这样简单。


借用在知乎学来的某台词:

you know nothing.



========================================================

补充个人眼中的知乎价值观:

1、点赞必须答案基本正确,不因为观点相似。事实正确而非观点合拍。

2、点赞不为顶答案,而是为关注者分享正确观点。

3、吵架先在评论,态度恶劣再开答案批判,并尽可能先匿名回答避免污染时间线。

4、虽然两个人打架都是犯错,但是绝对不意味着每个人要打不还手骂不还口,以直报怨,而非寄希望于青天大老爷



========================================================

知乎的风气是什么呢?一个答案只要内容详实,看起来各种高大上的名词,就能得到相当不错的赞同,毕竟这边都是一群小白。所以我一点儿也不纠结什么排名和赞同数。

某人三番五次的在评论 @我 ,让我很是烦恼,而这家伙的补充进一步暴露了其根本就没有看明白别人答案的实力,却喜欢乱喷。。我从来不反对在知乎喷一些错谬百出的答案,但是你要喷别人,至少肚子里要有货。


我认为有一定的道理,如果注释不支持嵌套的话,那么一个正则文法的词法分析器就搞定了

这是我上面第一次发答案的时候的原话,然后这个到现在为止连真名都不肯透露的所谓知乎用户,到第四次修改答案的时候才意识到,正则文法的词法分析器搞不定这个问题,但这个问题也不是很复杂。

然后不断地补充显摆其专业知识,殊不知大家根本不在一个层次

再来看

@邱昊宇

的答案:

早年的词法分析器一般都是用效率比较高的有限状态机,有限状态机什么都好,就是不支持嵌套注释。要支持,就得加个符号栈,但这对其它部分的解析没有太大帮助

这位匿名用户在喷了别人,改了三次答案之后,才发现这个问题:

但是,配合一个计数器完全能实现/**/的嵌套。(参见附录代码里注释掉的功能 )


就这样还有脸去喷别人,真是令人叹为观止,,,,,

我要是这家伙早就捂着脸删答案走人了。


至于:

我表示很无语,,,,


user avatar   timothyqiu 网友的相关建议: 
      

历史遗留。

---

以下为瞎扯,不一定正确:

早年的编译器一般都是词法分析和语法分析分开的。词法分析,是把源代码从文本流转换为符号流,比如关键字、加号、减号、字符串、数字、注释。

早年的词法分析器一般都是用效率比较高的有限状态机,有限状态机什么都好,就是不支持嵌套注释。要支持,就得加个符号栈,但这对其它部分的解析没有太大帮助。

当时来说,无法支持嵌套注释和获得较高的效率相比不值一提。




  

相关话题

  C语言中while(a=10);和while(a==10);有什么区别? 
  既然scanf和strcpy等函数会被编译器报不安全,那么C语言教材为什么还讲这些函数? 
  在有能够转化为C、C++、Java的第四代语言Raptor的情况下,为什么还需要C等程序设计语言? 
  写库函数供他人用的原理是什么? 
  C语言学到什么程度可以看Lua的源码? 
  为什么学习编程第一课要学习输出"hello, world"?这是谁规定的? 
  为什么 C 语言没有被 C++ 取代? 
  C语言如何封装printf函数? 
  C 语言中,x += 5 == 4 是什么意思? 
  为何void类型指针不能解引用,却可以参与强制类型转换? 

前一个讨论
为什么这么使用 C 语言 fgetc() 函数会出现乱码?
下一个讨论
在 web 浏览器可以轻松便捷访问的情况下,你为什么还要下载网站的手机客户端?





© 2024-11-22 - tinynew.org. All Rights Reserved.
© 2024-11-22 - tinynew.org. 保留所有权利