Objective-C方法定义中分号的意义是什么?

Mat*_*ing 4 methods syntax objective-c

当我在其中一个类中查看一些比较模糊的实现代码时,我发现了几个类似于以下的方法定义,我感到有点困惑:

- (void)doSomething; {
    // Something...
}

- (void)doSomethingWithSomething:(Something*)aSomething; {
    // Something with aSomething...
}
Run Code Online (Sandbox Code Playgroud)

这显然是将方法声明复制并粘贴到实现块中,然后忽略在提供定义时从声明中删除分号的工件.

这种混淆源于这些方法定义不仅可以编译,而且还可以完美地执行.我看到了它们,并立即预料到编译错误,就像你可能会想到的那样,如果你想尝试一些C疯狂的话:

void doSomething(); {
    /* Something */
}
Run Code Online (Sandbox Code Playgroud)

那么问题就变成了,"那个分号甚至做了什么?" 似乎它绝对没有任何东西,在这种情况下,问题变成了"为什么编译器允许在该特定位置使用单个随机分号?" 没有分号是正常的,一个显然也很好,但更多的是编译错误?

Car*_*rum 5

它没有做任何事情.当您将方法声明从标题复制/粘贴到实现文件中时,它只是帮助您.您不必删除分号,因此它可以为您节省几次击键.分号是完全可选的.