所以我正在编写一个 C 函数,但调试起来很困难,最终我发现问题是一个“空”if 语句。但是,我怀疑它不是空的,因为没有花括号,并且它可能只是传递换行符,直到找到一行代码。如果这一行是一个返回,我可能会认为返回现在位于 if 的“内部”。如果是这种情况,如果“if”条件为假,会发生什么?该函数会返回什么?在我原来的函数中,它只会返回 15 或 16(当条件为 false 时),而不是预期的 0 或 1。我在这里留下了我正在讨论的简化代码。在这种情况下,奇怪的事情发生了。看起来无论“if”条件是否满足,它总是返回1。如果我们取消注释“return 3;”考虑到第一个返回值将位于“if”内部,代码将按预期工作。这里究竟发生了什么?
#include <stdio.h>
int testIf(void){
if(0)
return 1;
//return 3;
}
int main(void){
printf("%d\n", testIf());
return 0;
}
最佳答案
请注意,在 C 语法中,一系列空白(例如多个换行符)相当于单个空白字符。
代码(带有注释的return 3
)具有未定义的行为,因为非void函数不会为所有执行路径返回值。 (main
有一个异常(exception),您不想知道它。)
你的编译器应该告诉你这一点。您启用了所有警告吗?
关于c - 如果没有花括号并在新行后返回,则此 C 程序中发生了什么事(如果没有大括号且返回为 'empty')?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64187194/