首页 理论教育 如何区分ANSIC和MPLAB C30语句?

如何区分ANSIC和MPLAB C30语句?

时间:2023-06-19 理论教育 版权反馈
【摘要】:本节讲述ANSIC与MPLAB C30所能接受的C语言之间的语句差别。语句差别是基本GCC实现的一部分,GCC文档,本节讨论的内容是基于标准GCC文档,并选择了GCC中针对MPLAB C30的特定语法和语义来进行讲述。这可通过计算goto语句goto*exp;来实现。这些常量的一个用途是初始化用做跳转表的静态数组:然后就可以通过索引来这样选择标号:这种标号值数组的用途与switch语句很类似。switch语句更整齐,比数组更好。

如何区分ANSIC和MPLAB C30语句?

本节讲述ANSIC与MPLAB C30所能接受的C语言之间的语句差别。语句差别是基本GCC实现的一部分,GCC文档,本节讨论的内容是基于标准GCC文档,并选择了GCC中针对MPLAB C30的特定语法和语义来进行讲述。

1.将标号作为值

可以用单目运算符“&&”获得在当前函数(或包含函数)中定义的标号的地址。值的类型为void*。这个值为常量,并可在这种类型的常量有效的任何地方使用这个值。例如:

为使用这些值,需要能跳转到值。这可通过计算goto语句goto*exp;来实现。例如:

可使用void*类型的任何表达式。

这些常量的一个用途是初始化用做跳转表的静态数组

然后就可以通过索引来这样选择标号:

这种标号值数组的用途与switch语句很类似。switch语句更整齐,比数组更好。标号值的另外一个用途是可以用在线程代码的解释程序中。解释程序函数中的标号可存储在线程代码中用于快速调度。

这种机制可能被错误使用,而跳转到其他函数的代码中。编译器不能阻止这种现象的发生,因此必须小心,确保目标地址对于当前函数有效。

2.省略操作数的条件表达式(www.xing528.com)

条件表达式的中间操作数可以被省略。如果第一个操作数非零,它的值就是条件表达式的值。因此,对于以下表达式:

如果x的值非零,表达式的值就是x的值,否则就是y的值。这个例子完全等价于下面的表达式:

在这个简单的例子中,省略中间操作数并不是特别有用。当能存在(如果它是一个宏参数)副作用时,省略中间操作数就变得特别有用。那么重复中间操作数将产生副作用两次。省略中间操作数使用了已经计算过的值,而不会因为重新计算而产生不希望的影响。

3.case范围

可以在单个case标号中指定一个连续值的范围,例如:

这与各个case标号的适当数字有相同的作用,每个数字对应从low到high中的每个整数值。这一功能对于ASCII字符码范围特别有用,例如:

注意,在…两边要加空格,否则它和整数一起使用时可能出现解析错误。例如要这样写:

而不要写成

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈