最近在一个C,开源项目中发现了一个奇怪的问题。我每次通过clang编译链接执行器都崩溃,但是gcc下就没有这个问题。
后来经过调试发现原因是bool返回的方法没有return语句!问题是,为什么能编?
这些列如下所示:
用g编译,得到了一个警告但是通过了,执行得到了正确的预期,
用clang编译同样类似的警告,也通过了,但是指令执行异常,
出于好奇,想知道为什么会有不同的结果。您希望通过程序集语法来查询差异,
g,组装说明如下:
铿锵,组装说明如下:
差异是通过yes方法找到的,
Gcc装配有返回指令,可以正常返回,
原因是gcc和llvm对于声明返回值而没有返回语句的编译方法有不同的处理结果。g,都保证通过,而clang认为不可能处理退出程序。
发表评论