战魂小筑

讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  251 随笔 :: 0 文章 :: 506 评论 :: 0 Trackbacks

今天在写一个宏时始终报

fatal error C1075: end of file found before the left brace '{' at 'd:\xxx.cpp(49)' was matched

检查排除代码,去除了宏,留下了一句

{__asm int 3;}

将大括号去掉,能编译成功。去掉;也能编译成功

我就奇了怪了,查了MSDN文档,里面是这么写的:

__asm assembly-instruction [ ; ]

__asm { assembly-instruction-list } [ ; ]

asm-statement:

__asm assembly-instruction ;opt

__asm { assembly-instruction-list };opt

assembly-instruction-list:

assembly-instruction;opt

assembly-instruction;assembly-instruction-list;opt

也就是说 分号是可选的,这个类似于lua

不加分号也可以这样写

__asm mov al, 2   __asm mov dx, 0xD007   __asm out dx, al
 
于是乎,我想这成了一个VC的bug
 
编译环境vs2008 c/c++
posted on 2010-02-24 17:11 战魂小筑 阅读(3615) 评论(3)  编辑 收藏 引用 所属分类: 程序调试技术C++/ 编程语言

评论

# re: C/C++ 语句{__asm int 3;} 能在VC下编译的过么? 2010-02-25 21:32 guest
问题在于分号是 asm的注释开始符号, 后面的反大括号被注释掉了.  回复  更多评论
  

# re: C/C++ 语句{__asm int 3;} 能在VC下编译的过么? 2010-03-01 13:18 zdd
楼上所言极是!,bug不是这么容易就发现的  回复  更多评论
  

# re: C/C++ 语句{__asm int 3;} 能在VC下编译的过么? 2010-03-29 13:33 小时候可靓了
是的,分号是汇编的注释!!  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理