环境描述:ubuntu18.04 + cmake version 3.10.2 + g++ version 7.5.0
场景描述:跑程序的时候遇到了一个错误:illegal instruction。使用cmake进行编译,编译是通过的,但是运行可执行文件的时候就会报错。用gdb去查发现停在了一个很普通的函数上(而且让我最纳闷的是我之前用g++编译,最后是可以运行的)
最后上网找到了答案(有点儿蠢),是我在int类型的函数中没有写return。这个编译的时候并没有报错,但提示了一个warning。加上return或者把函数返回值类型修改为void,程序正常运行。
warning具体是:
warning: control reaches end of non-void function [-Wreturn-type]
这个bug给我两个教训:
1)以后一定要重视warning,编译通过了,程序还可能因为warning存在潜在的问题。
2)有返回值的函数一定要写return