c - 如果没有花括号并在新行后返回,则此 C 程序中发生了什么事(如果没有大括号且返回为 'empty')?

标签 c if-statement return

所以我正在编写一个 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/

相关文章:

mysql - 带有 INSERT as then 子句的 if 语句 (MYSQL)

c - 在新的客户端连接到服务器后尝试 fork() [Socket 编程 C]

c - C中的数组字符串和普通数组有什么区别?

c - C中的默认构造函数

r - 如何在 R 的所有列中应用 "for loop"?

c# - 根据登录条件停止?

asp.net-mvc-2 - 如何在 ASP.NET MVC 2 中使用 QueryString 返回 View ?

c - 从 C 函数返回 STR 的问题

c - 首选尽可能短的类型

java - 为什么我的 java 程序在编译时出现 "cannot find symbol"错误?