,需要分号来结束类定义。我想知道为什么C#不需要它?为什么C#在类定义之后不需要分号?在C++中使用
回答
C++语言允许在类声明中声明一个变量。类似于:
class Mumble {
// etc...
} globalMumble;
分号是必需的语法,让编译器知道是否还声明了一个变量。这个语法是的一个慢源,非常难以解释编译错误消息。最糟糕的一个是这样的:
mumble.h:
class Mumble {
// etc...
} // <== note: semi-colon forgotten
mumble.cpp:
#include "stdafx.h"
#include "mumble.h"
int main() {
Mumble* obj = new Mumble;
}
这将产生这些美妙的错误消息:
main.cpp(8): error C2628: 'Mumble' followed by 'int' is illegal (did you forget a ';'?)
main.cpp(9): error C3874: return type of 'wmain' should be 'int' instead of 'Mumble'
main.cpp(10): error C2440: 'return' : cannot convert from 'int' to 'Mumble'
注意,所有错误消息引用.cpp文件,而不是包含该错误的.h文件。绝望的程序员已经在这个上掉了几个小时,还有大块头发。
C#语言是由高度熟练的C++程序员设计的。谁开始设计一种避免这些现实生活语法问题的语言。这在C#语法的许多地方都很明显。长话短说:C#不允许这种C++语法,不需要分号来帮助编译器。
分号使用C#划分语句。
因为类不是语句(并且大括号已经结束类定义),所以分号会是多余的。
关闭它或回答它,请不要这样做。 – 2011-05-18 01:02:08
@Hans:当我回答它时,它已经被认定为重复,并得到三个密切的选票。这就是生活。检查我的答案和结案的时间戳。 – 2011-05-18 03:19:38
- 1. 为什么需要两个括号在c/C++中使用宏?
- 2. 为什么“尽管”最后需要分号? (C/C++ /爪哇/等)
- 3. 为什么我不需要在C#中指定类型参数?
- 4. 为什么在这里需要分号?
- 5. 什么是!!的意义!在C - 为什么它需要?
- 6. C#需要什么类型?
- 7. 为什么在这个宏定义中需要@符号?
- 8. 为什么php中的类函数不需要分号?
- 9. 为什么在使用objective-c之前不需要初始化一些对象?
- 10. 为什么在这些导入后需要分号?
- 11. 为什么C#在表达式中使用可空字符时需要括号?
- 12. 为什么在C++中(C++)*(C++)未定义的行为?
- 13. 在C++中定义需要用C#和C++实现的接口
- 14. 为什么(以及何时)需要在sizeof之后使用圆括号?
- 15. 什么冒号(:)意味着在c#中定义一个类?
- 16. 为什么我们需要在C#中类型转换枚举
- 17. C++为什么我需要在扩展类中指定函数的作用域?
- 18. 为什么我需要用C类名的 “C” 盈++
- 19. 什么可以在C#中的任何类之外定义?
- 20. 为什么我们需要在C#中锁定和对象?
- 21. 为什么char在C中没有定义符号?
- 22. 如何在需要之前使用C#
- 23. 为什么我需要在c#类中使用虚拟修饰符?
- 24. 为什么你需要在C#中使用“Var”的“Dynamic”数据类型?
- 25. 为什么我们需要在C++中使用extern“C”{#include <foo.h>}?
- 26. 为什么列表成员在C#中不需要地更改?
- 27. CURL不在301重定向之后,我需要做什么?
- 28. 即使在使用“无符号字符”时,为什么ANSI字符在C中127之后仍不起作用?
- 29. 为什么变量不需要在Scala代码中定义?
- 30. 在Qt中注册用户定义类需要什么?
...虽然允许分号*,但是按照C#规范(它是可选的)。 – 2011-05-18 23:08:51