ios - 如果在 iOS 中 main 函数永远不会返回,那为什么还要返回任何东西呢?

标签 ios objective-c

#import <UIKit/UIKit.h>
#import "WhereamiAppDelegate.h"

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([WhereamiAppDelegate class]));
    }
}

仔细检查 UIApplicationMain 函数后,它指出“尽管声明了返回类型,但此函数永远不会返回”

如果 main 从不返回,为什么要尝试从此函数返回整数值?

最佳答案

Objective C 标准基于 C 标准。 C 标准明确禁止返回 voidmain。只允许这两个签名:

int main()
int main(int argc, char **argv)

为了符合这个标准,main 必须被声明为返回一个整数。返回值无关紧要,但必须存在(C99 标准允许省略 main 中的 return 语句)。

由于 UIApplicationMain 永远不会返回,因此以下内容也是有效的:

int main(int argc, char *argv[])
{
    @autoreleasepool {
        UIApplicationMain(argc, argv, nil, NSStringFromClass([WhereamiAppDelegate class]));
    }
    // This line is never reached, and C99 standard allows omitting it,
    // so you can safely remove the return statement below:
    return 0;
}

关于ios - 如果在 iOS 中 main 函数永远不会返回,那为什么还要返回任何东西呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16754722/

相关文章:

ios - React Native ListView 加载缓慢

ios - 我们可以为具有动态高度的 UITableViewCell 使用 XIB 吗?

objective-c - iOS - 我如何创建一个我的所有 Controller 都可以调用的 "utility"类

iOS,用于调整自定义 subview 中的内容属性的模式

ios - 我无法使图像和按钮的角变圆

ios - 多点触控和音频

iOS 为 initWithNibName 生成的函数结构

objective-c - LLVM 3.0 上 switch 语句的意外行为

objective-c - UITableView 重用未绘制的单元格

iphone - 使矩形等于 ImageView