XCC Pragma 指令
Pragma指令用于控制编译过程的各个方面,或向编译器提供额外的信息。XTC支持以下几种的编译指令:
#pragma unsafe arrays
该编译指令仅在XC文件中生效
此编译指示禁用了运行时安全检查,防止越界指针解引用和防止索引无效数组元素。如果该编译指示出现在函数内部,则适用于该函数内部的下一个do、while或for语句。如果该编译指示出现在函数外部,则适用于下一个函数定义的函数体。
#pragma loop unroll (n)
该编译指令仅在XC文件中生效
此编译指示控制当前函数中下一个do、while或for循环展开的次数。n指定要展开的迭代次数,展开仅在优化级别01及更高级别下执行。如果省略n参数,则编译器会尝试完全展开循环。在函数外部,此编译指示将被忽略。如果编译器无法执行展开操作,则会产生警告。
#pragma stackfunction n
此编译指示为当前翻译单元中下一个函数声明分配n个字(int型)的栈空间。
#pragma stackcalls n
该编译指令仅在XC文件中生效
此编译指示为下一个语句中调用的任何函数分配n个字(int型)的栈空间。如果下一个语句不包含函数调用,则该编译指示将被忽略;下一个语句可以出现在另一个函数中。
#pragma ordered
该编译指令仅在XC文件中生效
此编译指示控制下一个select语句的编译。此select语句被编译为这样一种方式,即当select开始时有多个事件准备就绪时,首先选择select语句中较早出现的情况,而不是后面出现的情况。
#pragma select handler
该编译指令仅在XC文件中生效
此编译指示表示下一个函数声明是一个select处理程序。select处理程序可以在select语句的case中使用,如下例所示。
#pragma select handler
void f(chanend c, int &token, int &data);
...
select {
case f(c, token, data):
...
break;
}
...
其效果是启用作为函数第一个参数的资源上的事件。如果事件被接收,select处理程序的主体在case的主体之前执行。
select处理程序的第一个参数必须具有传输类型,返回类型必须为void。
如果资源具有关联状态,例如条件,则在等待事件之前,select不会改变任何该状态。
#pragma fallthrough
该编译指令仅在XC文件中生效
此编译指示表示预期下一个switch情况会穿透到下一个switch情况,而不带有break或return语句。这将抑制由于穿透而导致的编译器警告/错误。