user-0 提问: 求助，unsigned int a =-100u;是非法定义的语句吗？

回复:
user: user-1
content: 引用 49 楼 advance_coder 的回复:非法，都－100了，还加个 u干啥？不知道编译器会不会对这里有重新解释，如果是我写编译器的话，绝对不会考虑对这种写法的支持。编程习惯不好。  可以 int a=－100;  // 对内存的重新解释 unsigned int b =(unsigned int)a;那么你写的编译器就不符合标准文档的要求了 是你错 不是代码错

user: user-2
content: 非法，都－100了，还加个 u干啥？不知道编译器会不会对这里有重新解释，如果是我写编译器的话，绝对不会考虑对这种写法的支持。编程习惯不好。  可以 int a=－100;  // 对内存的重新解释 unsigned int b =(unsigned int)a;

user: user-1
content: 引用 46 楼 weixin_43049869 的回复:我看到分号 就认为是一条语句。至于楼上说的语句分多少种没有声明，这是学生考试的思维. 语句不会报错，但效果不是字面上的意思然后这不是考试思维  往深的说 这是编译原理中语法分析的内容 往浅的说 这是语法标准要求  顺便 刚刚好相反的是 考试思维是 看到分号就以为是语句

user: user-1
content: 引用 46 楼 weixin_43049869 的回复:我看到分号 就认为是一条语句。至于楼上说的语句分多少种没有声明，这是学生考试的思维. 语句不会报错，但效果不是字面上的意思语句是一个专用术语 可以不了解 别随便解

user: user-3
content: 我看到分号 就认为是一条语句。至于楼上说的语句分多少种没有声明，这是学生考试的思维. 语句不会报错，但效果不是字面上的意思

user: user-4
content: 不是，但是编译器会取它的二进制的补码，可能会导致这个数很大。 一般不这样写的

user: user-5
content: 语句应该是合法的

user: user-6
content: 合法的。没什么问题。

user: user-7

user: user-1
content: 引用 40 楼 不想秃头爱敲码的小姐姐 的回复:为什么无符号的还可以定义为负数啊其实 -100 不是一个整体 是 一元 - 运算符和 操作数100 组成的表达式

user: user-8
content: 为什么无符号的还可以定义为负数啊

user: user-1
content: 引用 23 楼 六道佩恩 的回复:[quote=引用 20 楼 lin5161678 的回复:] 顺便 int i = 0 的确不是定义变量 是语法错误 这还真不是语法错误，C99已经通过了，你如何说？[/quote]看清楚别人说了什么  int i = 0 是语法错误 int i = 0; 才对  是不是要我加大加粗标红才能看见分号?

user: user-1
content: 引用 18 楼 六道佩恩 的回复:[quote=引用 12 楼 lin5161678 的回复:] for( int i=0 ; i<10 ; i++ ); 分号属于表达式语句 照你这么说，这里的int i=0不是定义变量了？没有声明i了？这个位置难道不是一个表达式语句该存在的地方吗？[/quote] for ( for-init-statement condition opt; expression opt) statement 有3个部分 for-init-statement condition opt ; expression opt  注意 for-init-statement 和 condition opt ; 中间什么都没有哦 没分号哦 再看看 for-init-statement 是什么东西 for-init-statement: expression-statement simple-declaration

user: user-9
content: 引用 20 楼 lin5161678 的回复:顺便 int i = 0 的确不是定义变量 是语法错误 这还真不是语法错误，C99已经通过了，你如何说？

user: user-1
content: 引用 18 楼 六道佩恩 的回复:[quote=引用 12 楼 lin5161678 的回复:] for( int i=0 ; i<10 ; i++ ); 分号属于表达式语句 照你这么说，这里的int i=0不是定义变量了？没有声明i了？这个位置难道不是一个表达式语句该存在的地方吗？[/quote]哦 你以为 for(这里只能写表达式 用2个分号隔开???)

user: user-10
content: 引用 16 楼 lin5161678 的回复:[quote=引用 15 楼 user-10 的回复:] 楼上两位跑偏了，如何就掐起来了。 根据本人查找资料，好象是这样：C和C++中关于语句的定义是不一样的，Declaration在后者中是语句，但C中不是，这一点应该没有争议吧。而6种语句，在K&R的书中确实列出了： 带标号语句 表达式语句 复合语句 选择语句 循环语句 跳转语句 共6种。但是MSDN中却有更多的，至少异常处理的是不能归类到这6种中去吧？所以6种至少不符合最新标准。 至于淡化语句概念，我感觉没有错，因为：C语言中变量的定义必须放在可以执行的语句前面，而C++没有这种限制。所以语句的概念并不会造成困扰。 另外函数调用似乎可以归类于表达式语句吧？C本来就没有异常处理的语句 最新的C标准中 语句依然是这6种 [/quote] 好象标准C中确实没有异常处理

user: user-1
content: 引用 18 楼 六道佩恩 的回复:[quote=引用 12 楼 lin5161678 的回复:] for( int i=0 ; i<10 ; i++ ); 分号属于表达式语句 照你这么说，这里的int i=0不是定义变量了？没有声明i了？这个位置难道不是一个表达式语句该存在的地方吗？[/quote]什么叫做照我这么说  我说什么了? 顺便 int i = 0 的确不是定义变量 是语法错误 分号是声明的组成部分 不能随便省略  100你不能省略一个0 变成 10  这是完全不同的意思 int i = 0; 声明定义一个变量i 怎么了  和我说的什么内容有冲突??

user: user-1
content: 引用 17 楼 user-10 的回复:[quote=引用 15 楼 user-10 的回复:] 楼上两位跑偏了，如何就掐起来了。 根据本人查找资料，好象是这样：C和C++中关于语句的定义是不一样的，Declaration在后者中是语句，但C中不是，这一点应该没有争议吧。而6种语句，在K&R的书中确实列出了： 带标号语句 表达式语句 复合语句 选择语句 循环语句 跳转语句 共6种。但是MSDN中却有更多的，至少异常处理的是不能归类到这6种中去吧？所以6种至少不符合最新标准。 至于淡化语句概念，我感觉没有错，因为：C语言中变量的定义必须放在可以执行的语句前面，而C++没有这种限制。所以语句的概念并不会造成困扰。 另外函数调用似乎可以归类于表达式语句吧？ 毕竟语法和编写出好的程序比较起来不是重点[/quote] 不是重点 但 是基础 顺便这里也不是在说写好程序  是在讲基础 提问本身就只是一个语法问题而已

user: user-9
content: 引用 12 楼 lin5161678 的回复:for( int i=0 ; i<10 ; i++ ); 分号属于表达式语句 照你这么说，这里的int i=0不是定义变量了？没有声明i了？这个位置难道不是一个表达式语句该存在的地方吗？

user: user-10
content: 引用 15 楼 user-10 的回复:楼上两位跑偏了，如何就掐起来了。 根据本人查找资料，好象是这样：C和C++中关于语句的定义是不一样的，Declaration在后者中是语句，但C中不是，这一点应该没有争议吧。而6种语句，在K&R的书中确实列出了： 带标号语句 表达式语句 复合语句 选择语句 循环语句 跳转语句 共6种。但是MSDN中却有更多的，至少异常处理的是不能归类到这6种中去吧？所以6种至少不符合最新标准。 至于淡化语句概念，我感觉没有错，因为：C语言中变量的定义必须放在可以执行的语句前面，而C++没有这种限制。所以语句的概念并不会造成困扰。 另外函数调用似乎可以归类于表达式语句吧？ 毕竟语法和编写出好的程序比较起来不是重点