0

可能重复:
Objective-C 实现文件中方法名称后的分号

我注意到两者

- (void)encodeWithCoder:(NSCoder *)aCoder;
{

}

- (void)encodeWithCoder:(NSCoder *)aCoder
{

}

作品。

使用 ; 不过有点尴尬。为什么有;作品超出了我的范围。不能在 C++ 中工作

事情something;应该是等价的,something{};因此something ;{}应该是等价的,something {};{}这是错误的。

例如 if(true) a=b; 与 if(true){a=b}; 相同;

4

3 回答 3

3

编译器忽略分号,这只发生在函数名上。当人们试图将函数名从 .h(interface) 复制到 .m(implementation)file 时会发生这种情况。我在使用目标 c 时也观察到了同样的情况。

于 2013-01-17T12:23:30.503 回答
2

正如布拉德拉森在这里的回答中所说:

是的,这样做是可以接受的语法。

事实上,我总是在我的实现中这样做,因为这样就可以轻松地将方法定义从接口复制并粘贴到实现,反之亦然,而无需记住你在哪里。这也有助于我在单独的行上使用对齐的括号。

同样,Yuji 指出

从语法上讲,在那里放一个分号是可以的。它没有任何目的,并且不鼓励这样做。一些编译器对这个额外的分号给出警告。

C/C++/Java 处理一个 ; 作为语句的结尾,因此每当编译器找到它时,它都会将其视为行尾。

编辑:

if(true) a=b;是一样的if(true){a=b};

这些都不能与上面相比。a=b是一个必须以分号结尾的表达式。因此,if(true) a=b;是正确的。if(true){a=b;}是正确的。但if(true) {a=b};不是,{ 和 } 生成一个包含未终止表达式的块,产生语义错误,因此编译器说 ERROR。

于 2013-01-17T12:13:04.957 回答
2

是的,

- (void)encodeWithCoder:(NSCoder *)aCoder;
{

}

- (void)encodeWithCoder:(NSCoder *)aCoder
{

}

两者具有相同的含义。

实际上编译器会忽略;函数后是否存在

即使你写

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

}

作为

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
{

}

有用!

于 2013-01-17T12:19:02.307 回答