使用 Android NDK,我有一个返回 jobject 的本机方法——除了我忘记了 return 语句。不幸的是,编译时没有警告,当我尝试运行它时,只在 0xdeadd00d 处给了我一个段错误。
虽然我最近主要在 Java 中工作,所以我脑海中的错误消息是“缺少返回语句”,但我相信 gcc 错误消息是“控制到达非 void 函数的结尾”。
我想打开那个警告,然后把它变成一个错误。我怎么做?(简单地使用-Wall -Werror
不是一种选择,因为我正在编译现有的代码库。)
使用 Android NDK,我有一个返回 jobject 的本机方法——除了我忘记了 return 语句。不幸的是,编译时没有警告,当我尝试运行它时,只在 0xdeadd00d 处给了我一个段错误。
虽然我最近主要在 Java 中工作,所以我脑海中的错误消息是“缺少返回语句”,但我相信 gcc 错误消息是“控制到达非 void 函数的结尾”。
我想打开那个警告,然后把它变成一个错误。我怎么做?(简单地使用-Wall -Werror
不是一种选择,因为我正在编译现有的代码库。)
经过一段时间的 GCC 手册页和几次重建后,我发现要添加的命令行标志是-Werror=return-type
. 将其附加到您的 Android.mk 中的 LOCAL_CFLAGS。
此外,要找出给定错误类型的名称,您可以打开 -Wall 并检查编译器输出;警告后,它会显示相关的 -W 标志。
error: no return statement in function returning non-void [-Wreturn-type]
要单独打开该警告,请使用与括号中显示的完全一致的标志。要将其作为错误打开,请在 -W 之后立即插入“error=”,如-Werror=return-type
.