注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

cc 的#line 宏(#line Directive),修改编译报错时提示的源文件名字和行数  

2013-04-17 09:45:00|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

使用bison的时候,发现很多有意思,使用gcc编译 c++的源文件的时候,提示的错误还是i显示的位置在  *.y 文件里面的。

觉得很有意思的一个功能。查看了一下代码,bison是在生成的代码里面插入了多  #line 来实现的。


gcc的文档 “6 Line Control ”

http://gcc.gnu.org/onlinedocs/cpp/Line-Control.html


这里有详细的说明。

#line linenum

#line linenum filename

#line anything else 

除了前面的两种,还可以使用任何可以展开的成前面两种默认的宏。


通过#line 修改后,后面的错误就报的错误在 #line指定的文件名里面的 。直到新的#line 指定新的文件名为止。


所以bison 生成的代码结构一般是这样子的:

------------------------

#line  123  “test.y”

插入语来自 test。y  的源码

#line  456  "current_file.cpp"      修给回实际的cpp文件的名字。

-------------------------


修改后_LINE__   __FILE__  等宏相应的也受影响


visual stuido c++ 里面也同样的东西  #line Directive (C/C++)

http://msdn.microsoft.com/en-us/library/b5w2czay(v=vs.110).aspx


做代码自动生成工具的时候,可以考虑一下使用这个宏。


  评论这张
 
阅读(438)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017