C:嵌套注释的解决方法及问题

主流的C/C++/Java/C#等语言,都将注释语法设计成 不可嵌套 的。
如: /* xxx /* yyy */ zzz */ 是非法的。

理由

注释是用于写描述性语言的,嵌套会使得可读性更差。

但事实上,注释不只是用来写注释标注,还通常用于屏蔽代码块。需要注释掉一大段程序的时候,仍用这个注释符( /* … * /)好不好呢?
答案当然是:不好!!!
如果那段要注释的程序中已经有地方用这个注释符注释过的话,那么再这样注释就可能会出问题。有些编译器在检测到 "/*" 会寻找最近的 "*/" 与其结合。

那么该如何进行大段程序的注释呢?

C语言中有

	  #if 0
	  #endif

这样的语句可以完成这个任务。

这是预编译语句,编译器会自动识别这些预编译代码,判断if是否成立,如果成立,就把****1 代码留下,****2 代码注释掉,这是编译器完成的。这样就不会影响程序的编译和移植了,如:

       #if 0****1
       /*..........*/#else****2
       /*..........*/#endif

问题来源:

《C陷阱与缺陷》

练习1-1.

某些C编译器允许嵌套注释。请写一个测试程序,要求:无论是对允许嵌套注释的编译器,还是对不允许嵌套注释的编译器,该程序都能正常通过编译(无错误消息出现),但是这两种情况下程序执行的结果不同。

提示:被双引号括起来的字符串中,注释符 /* 属于字符串的一部分,而在注释中出现的双引号又属于注释的一部分

思绪:

  1. 要形成嵌套注释,这个字符串序列必须含:/* /**/*/。
  2. 首先先讨论:/*/**/ 。对于不可允许嵌套注释的编译器来说,这就是一个完整的注释了;对允许嵌套注释的编译器来说,后面的字符都是注释的一部分。
  3. 我们在后面加上:"* /",将其变成:/* /**/"*/"。
  4. 对于不允许嵌套注释的编译器来说:上面字符串等效于字符串:"*/"。对于允许嵌套注释的编译器此时无法通过编译(剩下一个双引号)
  5. 因此我们在后面接着跟一个注释符和一个双引号:/* /**/"* /"/*" 。
  6. 对于允许嵌套注释的编译器来说:上面字符串等效于"/* " ;对于不允许嵌套的注释的编译器来说:上面字符串等效于" * /" / *"(用括号引起的注释结束符,后跟一段未结束的注释
  7. 最后简单的让最后的注释结束:/* /** /"* /"/*"/**/
  8. 这样如果允许嵌套注释,上面字符串等价于"/*" ,如果不允许嵌套注释等价于" */"
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值