Keil 5 ARMCC编译错误和警告解释大全(2) 序列号1000-2000

2024-01-07 06:36

本文主要是介绍Keil 5 ARMCC编译错误和警告解释大全(2) 序列号1000-2000,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 1001由 using 声明指定的类成员必须在直接基类中可见

1003Sun 模式与 cfront 模式不兼容

1004严格模式与 Sun 模式不兼容

1005只有在编译 C++ 时才允许使用太阳模式

1006 模板模板参数不能与其模板参数之一同名

1007默认参数的递归实例化

1009<entity> 不是可以定义的实体

1010析构函数名称必须是限定的

1011朋友类名不能用“typename”引入

1012 using-declaration 不能命名构造函数或析构函数

1013限定的好友模板声明必须引用先前声明的特定模板

1014类模板声明中的说明符无效

1015参数与形式参数不兼容

1016此位置不允许使用 ARM 函数限定符的前缀形式

1017不允许重复的 ARM 函数限定符

1018此声明/定义中不允许使用 ARM 函数限定符

ARM 函数限定符的示例包括 __svc__pure 和 __irq

请参阅《armcc 用户指南》中的以下内容:

关键字和运算符.

1019函数限定符 <entity>不允许用于非静态成员函数

1020__irq 函数不得带任何参数

1021__irq 函数不得返回任何结果

1022不能有指针,也不能引用<实体>功能

1023__global_reg 此声明不允许

1024无效的全局寄存器号;允许 1 到 8 个

__global_reg 中使用了无效的寄存器。

例:

__global_reg(786) int x;

1025__svc参数<实体>不在 ARM SVC 指令允许的范围(0 到 )内

对于 ARM 代码,SVC 编号限制为 0 到 0xffffff,对于 Thumb 代码,SVC 编号限制为 0 到 0xFF

对于标准半托管 SVC,0x123456用于 ARM 代码,0xAB 用于 Thumb 代码。

1026不允许获取全局寄存器变量的地址

1027__svc_indirect函数必须有参数

1028全局注册声明与<实体>冲突

1029__packed 忽略非指针参数

1030<entity> <type>以前声明时未__packed

1031必须__packed包装<类型>中<类型>的定义

编译器对包含在已打包父结构中的非打包子结构进行错误处理。这包括子结构是数组的情况。

例如:

typedef struct ChildStruct {int a;} ChildStruct;
typedef __packed struct ParentStruct {ChildStruct child[1];} ParentStruct;

结果显示以下消息:

Error: #1031: Definition of "ChildStruct" in packed "ParentStruct" must be __packed

请参阅《armcc 用户指南》中的以下内容:

__包装好的.

1032必须__packed打包<类型>中嵌套的匿名<实体>的定义

1033<实体>与函数定义不兼容

1034__irq 函数不得是函数调用的目标

1035单精度操作数隐式转换为双精度

1037__global_reg 在此声明中无效

1038指定的对齐无效;只允许 2 的整数幂

1039与<实体>冲突的对齐声明

1040不允许未对齐

1041自动对象的对齐方式不得大于 8

例如:

int main(void){__align(16) int foo = 10;
}

局部变量 foo 不允许__align,因此给出了错误。

请参阅《armcc 用户指南》中的以下内容:

__對齊.

1042<entity> 编译位置无关时无法动态初始化

1043<entity> 不能是 const,因为它包含可变成员

例如:

struct foo { int a; mutable int b; };
extern const struct foo bar;

当编译器处于 ROPI 或 RWPI 模式时,它不允许 const 对象包含可变成员。

此限制的原因是,在这些模式下,编译器处理只读数据的方式与读写数据不同。因此,它必须知道对象是在 RO 还是 RW 数据部分中。在以下示例中,此限制意味着 bar 不能包含任何可变成员,因此位于 RO 数据部分中:

struct foo;
extern const struct foo bar;
const struct foo *get_foo()  { return &bar; }

请参阅《armcc 用户指南》中的以下内容:

--apcs=限定符...限定 符.

1044选项“dep_name”只能在编译C++时使用

1045类 <type> 开始的“运算符>”函数序列循环

1046<entity>没有成员类 <entity>

1047全局范围没有名为 <entity> 的类

1048模板默认参数的递归实例化

1049访问声明和使用声明不能出现在联合中

1050<entity> 不是类成员

1051不允许非标准杆件常量声明

1052选项“ignore_std”只能在编译C++时使用

1053选项“parse_templates”只能在编译C++时使用

1054选项“dep_name”不能与“no_parse_templates”一起使用

1055指定的语言模式不兼容

1056嵌套类的无效重新声明

1057不允许包含未知大小数组的类型

1058不能在内联函数中定义具有静态存储持续时间的变量

1059 具有内部链接的实体不能在具有外部链接的内联函数中引用

1060 参数类型 <type> 与此类型泛型函数宏不匹配

1062好友声明不能在上一个声明中添加默认参数

1063<实体>不能在此范围内声明

1064保留标识符<实体>只能在函数内部使用

1065此通用字符不能以标识符开头

1066应为字符串文本

1067无法识别的 STDC 编译指示

1068预期的“开”、“关”或“默认”

1069STDC 编译指示只能出现在全局作用域中的声明之间,或块作用域中的任何语句或声明之前

1070不正确地使用va_copy

1071<entity> 只能与浮点类型一起使用

1072不允许使用复杂类型

1073无效的指示符类型

1074 浮点值无法准确表示

1075复数浮点运算结果超出范围

1076实数和虚数之间的转换结果为零

1077 不能为灵活数组成员指定初始值设定项

1078imaginary *= imaginary 将左操作数设置为零

1079standard 要求通过后续声明(假定为“int”)为<entity>指定类型

1080内联<实体需要定义>

1081从整数到更小指针的转换

1082浮点类型必须包含在_Complex或_Imaginary类型的类型说明符中

1083内联汇编程序语法错误

在 ARM 编译器 4.1p2 及更早版本中,当内联汇编代码包含内联汇编程序不支持的指令(例如 WFI 指令)时,可能会生成此错误。在 4.1p3 及更高版本(包括所有 ARM 编译器 5 版本)中,会引发以下错误:

1084: This instruction not permitted in inline assembler

1084此指令不允许在内联汇编程序中使用

1085缺少操作数

1086 操作数类型错误

1087操作数应该是恒定的

1088操作数数错误

1089无效的 PSR 操作数

1090预期的 PSR 操作数

1091指定的班次无效

1092应为 acc0

1093必须是可修改的左值

1094预期为寄存器表达式

1095需要标签或函数名称

1096指令不能是有条件的

1097预期为 [ 或 ]

1098预计轮班操作

1099出乎意料 ]

1100不允许注册指定的班次

1101不允许预先索引寻址

1102不允许后索引寻址

1103寻址模式下不允许写回

1104预期 {

1105预期 }

1106寄存器列表中的寄存器过多

1107只有^在这里有效

1108无法在寄存器列表中混合虚拟寄存器和 C/C++ 表达式

1109在寄存器范围内只能指定虚拟寄存器

1110内联汇编程序不支持用户模式寄存器选择/CPSR 更新。使用嵌入式汇编程序或离线汇编程序

1111应为协处理器名称

1112需要协处理器寄存器名称

如果发生以下任一情况,则内联汇编程序会给出这些错误:

  • MCR 或 MRC 指令中意外遗漏了协处理器编号

  • 给出了无效的协处理器编号或协处理器寄存器编号。

这是正确使用的示例:

void foo()
{int reg0;__asm{MRC p15, 0, reg0, c1, c0, 0}
}

1113生成 Thumb 代码时不允许使用内联汇编程序

1114目标体系结构/处理器不支持此功能

使用 armcc --cpu 4T 编译时的示例:

int main(void) {int a,b,c;__asm {QADD a,b,c}return(a);
}

导致错误消息,因为饱和添加指令仅在 ARMv5TE 及更高版本中受支持。

1115 无法分配给常量操作数

1116寄存器列表不能为空

1117不允许使用不合格的虚拟函数

1118预期为换行符

1119函数中不允许引用静态变量__asm

1120__asm函数中不允许引用静态函数

1121函数中不允许指向数据成员的指针__asm

1123基类 <type> 是 <type 的虚拟基类>

1124基类 <type> 不是 <type 的虚拟基类>

1125<entity> 没有成员函数 <entity>

1126本声明中不允许使用“__asm”

1127不允许__asm构造函数使用成员初始值设定项列表

1128不允许对 __asm 构造函数使用 try 块

1129操作数的顺序与以前的编译器版本不兼容

1130__align typedef 中不允许

1131不可移植指令(LDM 在注册列表中具有写回和基数,基数的最终值不可预测)

1132不可移植指令(STM有写回和基数,不是在注册列表中的第一位,基数的存储值不可预测)

1133虚拟基寄存器不允许使用表达式操作数

1134字面意思被视为“长长”

常量太大,无法用有符号的 long 表示,因此被视为(有符号的)long long

例如:

int foo(unsigned int bar) 
{   return (bar == 2147483648); 
} 

给出警告,因为 2147483648 大于有符号长整型允许的最大值。若要消除警告,如果应将常量视为(64 位)long long 类型而不是符号的 long,请显式添加 ll 或 LL 后缀,或者,如果应将其视为无符号整数,请添加 U 后缀。

例如:

int foo(unsigned int bar) 
{ return (bar == 2147483648U); 
} 

请参阅《armcc 用户指南》中的以下内容:

长 长.

1135字面意思被视为“无符号长长”

常量太大,无法用有符号的 long long 表示,因此被赋予了类型无符号的 long long。另请参阅错误编号 1134。

1137应为逗号

1138此表达式后出现意外的逗号

1139MRRC 操作操作码必须位于 0-15 范围内

1140MCRR 操作操作码必须在 0-15 范围内

1141CDP 操作操作码必须位于 0-15 范围内

1142MRC 操作操作码必须位于 0-7 范围内

1143MCR 操作操作码必须在 0-7 范围内

1144opcode_2 必须在 0-7 范围内

1145LDC/STC 额外操作码必须在 0-255 范围内

1146LDC/STC 偏移量必须在 -1020 至 +1020 范围内,并且字对齐

1147常量操作数超出范围

1148不允许使用 --fpu=none 的浮点运算符

1149函数定义中不允许使用 --fpu=none 的浮点返回类型

1150函数定义中不允许使用 --fpu=none 输入浮点参数

1151不允许使用 --fpu=none 定义带有初始值设定项的浮点变量

1152多态基类也需要导出

1153 无法在此寄存器列表中分配物理寄存器

1154此处只能指定偶数的物理寄存器

1155此处只能指定对物理寄存器的分配

1156此处只能指定物理寄存器的分配

1157只能在损坏的寄存器列表中指定物理寄存器

1158PSR 操作数在此处无效

1159应为明确的标签或函数名称

1160对临时析构函数的调用将覆盖此指令更新的条件标志

1161 无法直接修改堆栈指针 SP (r13)

1162无法直接修改链路寄存器 LR (r14)

1163无法直接修改程序计数器 PC (r15)

1164偏移量必须与字对齐

1165不能在匿名联合中声明类型

1166返回指向局部变量的指针

1167将指针返回到本地临时

1168选项“导出”只能在编译 C++ 时使用

1169:“导出”选项不能与“no_dep_name”一起使用

1170:“导出”选项不能与“implicit_include”一起使用

1171<实体>的声明与另一个翻译单元的声明不相容

1172另一个声明是<实体>

1175 字段声明不能具有涉及可变长度数组的类型

1176<实体>的声明在<实体的编制过程中具有不同的含义>

1177预期的“模板”

1178:“导出”不能用于显式实例化

1179:“出口”不能用于此声明

1180 不能将未命名命名空间的成员声明为“导出”

1181模板在定义后不能声明为“导出”

1182声明不能有标签

1183禁用对导出模板的支持

1185<entity> 已在编译 <entity 期间定义>

1186<实体>已在另一个翻译单元中定义

1187非静态局部变量不能在__based规范中使用

1188编译多于一个翻译单元时,未必指定列出 makefile 依赖项的选项

1190编译多于一个翻译单元时,不得指定生成预处理输出的选项

1191 不能在具有用户声明构造函数的类中声明与其类同名的字段

1192:“implicit_include”不能在编译多于一个翻译单元时使用

1193导出的模板文件<实体>已损坏

1194<entity> 无法实例化 -- 它已显式专用于包含导出定义的翻译单元

1196 对象具有与成员<实体不兼容的类型限定符>

1197没有 <Entity> 实例与参数列表和对象匹配(该对象具有阻止匹配的类型限定符)

1198属性指定与 <type 不兼容的模式>

1199没有指定宽度的类型

1200属性指定的对齐值无效

1201 <type> 的属性无效

1202<实体的属性无效>

1204属性<实体>不带参数

1206需要属性名称

1207未知属性<attribute>

1208此处可能不会显示属性

1209属性 <entity> 的参数无效

1211在“goto *expr”中,expr 必须具有“void *”类型

1212:“goto *expr”不标准

1213获取标签地址不规范

1214多次指定文件名:

1215#warning 指令:<实体>

1217:“transparent_union”属性只适用于联合,<type>不是联合

1218 “transparent_union”属性在不完整的类型上被忽略

1219<type> 不能透明,因为 <entity> 的大小与第一个字段的大小不同

1220<type> 不能是透明的,因为它有一个类型为 <type> 的字段,该字段的大小与第一个字段的大小不同

1222属性<属性>不适用于局部变量

1224函数定义中不允许使用属性

1226大小写范围中的第二个常量必须大于第一个常量

1227函数定义中不允许使用 ASM 名称

1228在 typedef 中忽略 ASM 名称

1229未知注册名称“<entity>”

1230修饰符字母“<entity>在 ASM 操作数中被忽略

1231未知的 ASM 约束修饰符“<entity>”

1232未知的 ASM 约束字母“<entity>”

1233ASM 操作数没有约束字母

1234ASM 输出操作数必须具有“=”或“+”修饰符之一

1235ASM 输入操作数可能没有“=”或“+”修饰符

1237ASM 语句中的冒号过多

1238注册“<entity>”多次使用

1239寄存器“<entity>”既被使用又被破坏

1240注册“<实体>”不止一次被破坏

1241注册“<entity>”具有固定用途,不得在ASM声明中使用

1242寄存器“<entity>”有固定用途,不得在ASM声明中删

1243必须完全省略空的 clobbers 列表

1244预期有 ASM 操作数

1245期待寄存器敲击

1246:“format”属性需要省略号参数

1247第一个替换参数不是第一个变量参数

1248格式参数索引大于参数数

1249format 参数没有字符串类型

1250用于消除句法歧义的“template”关键字只能在模板中使用

1253属性不适用于非函数类型 <type>

1254指向 void 或函数类型的指针上的算术运算

1255存储类必须是自动或寄存器

1256<type> 在通过省略号参数传递时,将提升为 <type>;请改用后一种类型

1257<entity> 不是基类成员

1258__super不能出现在 \“::\” 之后

1259__super 只能在类范围内使用

1260__super 后面必须跟 \“::\”

1262残缺的名字太长了

1263偏移量必须与半字对齐

1264偏移量必须双字对齐

1265不允许使用 --fpu=none 与浮点类型相互转换

1266操作数应为常量表达式

1267隐式物理寄存器<实体>应定义为变量

1268声明别名为未定义的实体 <entity>

1269声明与其别名 <entity> 不匹配

1270声明为别名的实体不能有定义

1271可变长度数组字段类型将被视为零长度数组字段类型

1272忽略左值上的非标准强制转换

1273无法识别的旗帜名称

1274void 返回类型无法限定

1275此处忽略自动说明符(在标准 C/C++ 中无效)

1276忽略没有“packed”属性的对齐减少

1277对应于<实体>的成员模板在另一个翻译单元中被声明为不同类型的模板

1278忽略多余的初始值设定项

1279va_start只能出现在带有省略号参数的函数中

1280:“short_enums”选项只在 GNU C 和 GNU C++ 模式下有效

1281 导出信息文件 %sq1 在行号 %s2 处无效

1282变量<实体>不能在寄存器范围内使用

1283这里需要一个物理寄存器名称

1284此处不能指定寄存器范围

1285未定义隐式物理寄存器<实体>

1286LDRD/STRD 指令将扩展

当 LDRD 和 STRD 指令用于内联汇编程序时,编译器会将它们扩展为两个 LDR 或 STR 指令,然后再通过编译器优化阶段。

优化阶段通常将两个LDR或STR指令组合回单个LDRD或STRD指令,但在某些情况下可能不使用 LDRDSTRD

1287LDM/STM指令可以扩展

编译器在经过编译器优化阶段之前,将内联汇编代码中的 LDM 和 STM 指令扩展为多个 LDR 或 STR 指令。

优化阶段通常会将 LDR 或 STR 指令改回 LDM 或 STM 指令,但在某些情况下可能不使用单个 LDM 或 STM 指令。

1288由于名称冲突,未定义隐式 ARM 寄存器<实体>

1289语句表达式只允许在块作用域中使用

1291在非寄存器自动变量上忽略 ASM 名称

1293在条件中分配

在需要布尔值的上下文中,例如,在 ifwhile 或 for 语句的控制表达式中,或条件表达式的第一个操作数中,该表达式包含以下值之一:

  • 按位非运算符 (~)。很可能是逻辑非运算符 () 的意图。

  • 赋值运算符 (=)。这可能是键入错误的相等运算符 (==)。例如:

    int main(void) 
    { int a,b; if (a=b); 
    } 
    

无论哪种情况,如果有意使用运算符,都可以通过添加与零的显式比较来禁止显示警告。

例如,将示例中的 if 语句更改为:

  if ((a=b)!=0);

也可以使用 --diag_suppress 1293 选项来抑制此警告。

另请参阅消息编号 187,该消息在与常量进行比较时适用。

1294旧式函数<实体>

编译器接受旧式和新式函数声明。以下示例显示了它们之间的区别:

// new style 
int add2(int a, int b) 
{ return a+b; 
} 
// old style 
int oldadd2(a,b) 
int a; 
int b; 
{ return a+b; 
} 

在 C 模式下编译旧式函数时,编译器会报告:

Warning: #1294-D: Old-style function oldadd2 

1295弃用声明 <entity> - 给出 arg 类型

当在 ANSI C 模式下遇到没有参数类型的声明时,通常会发出此警告。在 ANSI C 中,不推荐使用此类声明。但是,在移植旧代码时,使用 --diag_suppress 1295 选项禁止显示此警告有时很有用。

在 C++ 中:

void foo(); 

方法:

void foo(void); 

并且不会生成任何警告。

1296使用的扩展常量初始值设定项

用作常量初始值设定项的表达式可能不可移植。

这警告说,存在一个不遵循 ANSI C 严格规则的常量初始值设定项。

解决方案是重写代码以符合 ANSI。

以下示例显示了生成此警告的代码,并建议了使用 ANSI C 兼容代码实现相同目标的潜在替代方法。

使用 --diag_suppress 1296 进行编译会禁止显示警告。

示例 1:

当 x 和 y 是静态对象(即全局变量或静态局部变量)时,此代码会生成警告 1296,因为 C 标准不允许在常量表达式中强制转换指向整数的指针:

int x;
int y = (int) &x;

ANSI C 要求静态对象的初始值设定项是常量表达式。(int) &x 不被视为常量表达式。

请注意,地址不是算术类型,因此 ANSI C 不允许使用此示例 C 代码。 不幸的是,这是其他编译器中常见的 ANSI 不合规,并且可能导致在将旧代码移植到 ARM 时出现问题。这就是 ARM 编译器发出警告而不是错误的原因。

符合 ANSI C 的替代方法是重写代码,使 y 成为指向 x 的指针:

int x;
int* y = &x;

示例 2:

使用 --c90 开关编译的此代码会生成警告 1296:

const int foo_table[] = { (int)"foo", 0, 1, 2}; 

符合 ANSI C 的替代方法是重写代码,如下所示:

const char* foo_table[] = { "foo", 0, (char*)1, (char*)2};

示例 3:

此代码生成警告 1296,因为 C 标准不允许在常量表达式中强制转换指向长整数的指针:

char value;
long array[] = {(long)&value,(long)"string"
};

符合 ANSI C 的替代方法是重写代码以使用指针:

char value;
char *array[] = {(char*)&value,(char*)"string"
};

此解决方案之所以有效,是因为 C 语言中允许指针到指针的强制转换。

1297头文件未防止多重包含

当 #included 未受保护的头文件时,会发出此警告。

未受保护的头文件是未包装在声明中的头文件,例如:

#ifdef foo_h 
#define foo_h 
/* body of include file */ 
#endif 

默认情况下,此警告处于关闭状态。可以通过以下方式启用它:

--diag_warning 1297

1298 头文件由“<entity>”保护,但不 #define 它

例:

#ifndef MYHEADER_H 
//#define MYHEADER_H 
#endif 

若要更正代码,请删除注释斜杠 (//)。默认情况下,此警告处于关闭状态。可以通过以下方式启用它:

--diag_warning 1298

1299成员和基类将按声明顺序初始化,而不是按成员初始化列表顺序初始化

1300<entity> 继承隐式虚拟

当派生类的非虚拟成员函数隐藏父类的虚拟成员时,会发出此警告。例如:

struct Base { virtual void f(); };
struct Derived : Base { void f(); };

结果显示以下消息:

Warning: #1300-D: f inherits implicit virtual
struct Derived : Base { void f(); };^

在派生类中添加 virtual 关键字可防止出现警告。对于C++,指定 --diag_suppress 1300 选项会禁止隐式虚拟警告。

1301在结构中插入填充<实体>

为了使结构的成员正确对齐,在成员之间插入了一些填充。默认情况下,此警告处于关闭状态,可以使用 --diag_warning 1301 或 --remarks 启用。

例如:

struct X {char x;int y;
}

结果显示以下消息:

Warning: #1301-D: padding inserted in struct X

编译器还可以警告在结构末尾或结构之间添加填充,请参阅消息编号 2530。

1302类型太大,无法在寄存器中返回 - __value_in_regs忽略

1303使用 --force_new_nothrow:添加了 “throw()”

1304操作员新缺少异常规范

1305使用 --force_new_nothrow:添加了“(::std::nothrow)”

1307不允许使用 --fpu=none 的浮点参数

1308 必须__packed__packed类<类型>的基类<类型>

1309无法识别的 UPC 编译指示

1310共享块大小与先前指定的块大小不匹配

1311括号内的表达式被假定为块大小规范,而不是数组维度

1312 共享阵列的块大小必须大于零

1313不允许多个块大小

1314严格或宽松需要共享

1315在此上下文中不允许使用线程

1316 指定的块大小超出了 <entity 的最大值>

1317不允许函数返回共享

1319当线程数非常数时,共享类型数组的一个维度必须是 THREADS 的倍

1320不允许在结构或联合中使用共享类型

1321参数可能没有共享类型

1322动态 THREADS 维度需要确定的块大小

1323共享变量必须是静态的或外部

1324upc_blocksizeof的参数是指向共享类型(不是共享类型本身)的指针

1325嵌套upc_forall中忽略的亲和力表达式

1326不允许分支到upc_forall环路或分支出

1327亲和表达式必须具有共享类型或指向共享类型

1328关联具有共享类型(不是指向共享的指针)

1329共享的空洞*类型只能进行比较以达到相等性

1330UPC 模式与 C++ 和 K&R 模式不兼容

1331忽略输入行中的空(零)字符

1332字符串或字符常量中的空(零)字符

1333标头名称中的空(零)字符

1334for-initializer 中的声明隐藏了周围作用域中的声明

1335隐藏的声明是<实体>

1336<entity>fd 的原型声明在重新声明后被忽略

1338<entity>pd 必须具有外部 C 链接

1339变量声明隐藏 for-initializer 中的声明

1340typedef <entity> 不能用于详细说明的类型说明符

1341忽略零常量的调用

1342参数<实体>不能在函数 try 块的 catch 子句中重新声明

1343必须在包含模板的命名空间中声明<实体>的初始显式专用化

1344\“cc\” clobber 被忽略

1345:“template”后面必须跟一个标识符

1346在此上下文中不允许使用 MYTHREAD

1347布局限定符无法限定指向共享的指针

1348布局限定符无法限定不完整的数组

1349声明<实体>隐藏处理程序参数

1350忽略非标准强制转换为数组类型

1351此编译指示不能在_Pragma运算符中使用(必须使用 #pragma 指令)

1352字段使用基类的尾部填充

1353GNU C++ 编译器可能使用位字段填充

1355 抽象类 <type> 具有非虚拟析构函数,在指向此类的指针上调用 delete 是未定义的行为

1356非静态成员声明中不允许使用 ASM 名称

1357使用 <entity> 的地址静态初始化 <entity>可能会导致链路失败 -ropi

请参阅错误编号 1359。

1358对于 ROPI,不能降低使用 <entity> 地址的外部常量 <entity> 的静态初始化

1359 使用<entity>地址对<entity>进行静态初始化可能会导致链路故障 -rwpi

警告 1357 和 1359 突出显示了与位置无关 (PI) 的代码构造,这些构造可能会导致后续链接步骤失败。

使用 --apcs /ropi 编译时,以下代码:

char *str = "test"; /* global pointer */

结果显示以下消息:

Warning: #1357-D: static initialisation of variable "str" using address of string literal may cause link failure --ropi

因为全局指针 str 必须初始化为 .constdata 部分中 char 字符串测试的地址,但绝对地址不能在 PI 系统中使用。

使用 --apcs /rwpi 编译时,以下代码:

int bar;
int *foo = &bar; /* global pointer */

结果显示以下消息:

Warning: #1359-D: static initialisation of variable "foo" using address of bar may cause link failure --rwpi

因为全局指针 foo 必须初始化为 .data 部分中 bar 的地址,但绝对地址不能在 PI SYSTEM 中使用。

以下解决方法是可能的:

  • 更改代码以避免使用全局指针。例如,您可以改用全局数组或本地指针。

  • 在运行时进行初始化,例如:

    int bar;
    int *foo;
    

    然后在设置 foo = &bar; 的函数中编写代码。这是因为在生成代码而不是静态初始化数据时,编译器可以绕过 ROPI/RWPI 约束。

另请参阅链接器错误 L6248E。

1360对于RWPI,不能降低使用<entity>地址的外部常量<entity>的静态初始化

例如,当使用 --apcs /rwpi 编译时:

extern int y;
int* const x = &y;
int* foo()
{return(x);
}

生成警告,因为 Y 前面加上 extern 会阻止编译器在变量 x 和 y 之间定义直接地址偏移。

1361<entity> 被宣布为“已弃用”

1362忽略无法识别的格式函数类型<实体>

1363基类 <entity> 使用基类 <entity> 的尾部填充

1364:“init_priority\”属性只能用于定义类类型的静态数据成员和命名空间范围变量

1365请求的初始化优先级保留供内部使用

1366这个匿名的联合/结构字段被<实体隐藏>

1367无效的错误号

1368无效的错误标记

1369应为错误号或错误标记

1370类的大小受尾部填充的影响

1371标签只能在函数定义中引用

1372不允许将控制权转移到语句表达式中

1374此语句不允许在语句表达式中

1375语句表达式中不允许使用非 POD 类定义

1376语句表达式中不允许存在可破坏的实体

1377语句表达式中不允许使用动态初始化的局部静态变量

1378语句表达式中不允许有可变长度的数组

1379默认参数中不允许使用语句表达式

1381 结果操作数的类型比实际结果窄

1382指向函数的指针和指向数据的指针之间的非标准转换

1383接口类型不能有虚拟基类

1384 接口类型不能指定“私有”或“受保护”

1385接口类型只能派生自其他接口类型

1386<type> 是接口类型

1387接口类型不能有 typedef 成员

1388 接口类型不能有用户声明的构造函数或析构函数

1389接口类型不能有用户声明的成员算子

1390不能在函数中声明接口类型

1392接口类型不能有数据成员

1393接口类型不能包含友元声明

1395接口类型不能是嵌套类类型

1396接口类型不能有成员模板

1397接口类型不能有静态成员函数

1398此编译指示不能在__pragma运算符中使用(必须使用 #pragma 指令)

1399限定符必须是 <type 的基类>

1400声明必须对应于指定基类中的纯虚拟成员函数

1401由于<类型的大小或复杂性,内部计算中出现整数溢出>

1402内部计算中的整数溢出

1403__w64 只能在 intlong 和指针类型上指定

1404intlong 或指针类型宽度为 64 位的环境中编译时,可能会缩小转换范围

1405编译指示包的当前值为<实体>

1406忽略 pragma pack(show) 的参数

1409忽略较早的 __declspec(align(...))

1410应为 <entity> 属性参数的参数值

1411 <entity> 属性参数的参数值无效

1412应为 <entity> 属性参数的布尔值

1413 位置参数不能跟在属性中的命名参数后面

1414属性<entity>没有名为 <entity> 的参数

1415预期为 <entity> 属性的参数列表

1416应为“,”或“]”

1417属性参数 <entity> 已被赋予值

1418无法将值分配给 <entity> 属性

1419 抛出表达式可能没有指向不完整类型的指针

1420应用于不完整类型的对齐运算符

1421<实体>只能用作独立属性

此处不能使用 1422<entity> 属性

1424此处不允许使用属性

1425<entity> 属性参数的参数值无效

1426属性参数过多

1427不允许从不可访问的基类<类型>转换

1428:“导出”选项需要不同的模板签名

1429具有不同字符类型的字符串文字不能连接

1430 GNU 布局错误未被模拟,因为它将虚拟基础 <entity> 置于 <entity> 对象边界之外

1431虚拟基础<实体>放置在<实体>对象边界之外

1432命名空间成员声明中的非标准限定名称

1433忽略对齐减少

1434忽略 const 限定符

1436__breakpoint 参数必须是整数编译时常量

1437__breakpoint 编译 ARM 时,参数必须在 0-65535 之间

1438__breakpoint 编译 Thumb 时,参数必须在 0-255 之间

1439目标体系结构/处理器不支持 BKPT 指令

1440超大位域布局将更改 -- 请考虑以“<entity>:0;”开头

1441左值上的非标准铸造

C 规范指出“赋值运算符应具有可修改的左左值”和“强制转换不产生左值”。

1442如果要将多态基类用于导出派生,则需要导出它们

1443需要导出通过虚拟派生继承的多态基类

1444通过虚派生继承的多态基类需要导出所有虚函数

1445 无效的 GNU asm 限定符

1446通过省略号传递的非 POD 类类型

1447 非 POD 类类型无法被va_arg提取

ISO C++ 标准定义可变参数函数的非必需参数必须是普通旧数据 (POD) 类型,例如 int 或 char,但不能是结构或类。

为了避免错误或警告,可以改为提供结构的地址。

1448在定点文字中,“u”或“U”后缀必须出现在“l”或“L”后缀之前

1449选项“fixed_point”只能在编译 C 时使用

1450 整数操作数可能导致定点溢出

1451定点常数超出范围

1452定点值无法准确表示

1453常量对于长长来说太大;给定无符号长长类型(非标准)

1454布局限定符无法限定指向共享无效的指针

1455多维数组类型的重复 THREADS

1456 using 指令可能只出现在命名空间作用域中

1457<entity>声明一个非模板函数 -- 添加<>以引用模板实例

1458操作可能导致定点溢出

1459表达式必须具有积分类型、枚举类型或定点类型

1460表达式必须具有整数或定点类型

1461用“noreturn”声明的函数返回

1462ASM 名称被忽略,因为它与以前的声明冲突

1463类成员 typedef 不能重新声明

1464获取临时地址

1465属性在不是定义的类声明中被忽略

1466隐式转换为浮点类型的定点值

1467定点类型没有分类

1468 模板参数可能没有定点类型

1469不允许使用十六进制浮点常量

1470选项“named_address_spaces”只能在编译 C 时使用

1471浮点值不适合所需的定点类型

1472不能完全转换为定点值

1473定点转换导致符号变化

1474整数值不适合所需的定点类型

1475定点运算结果超出范围

1476多个命名地址空间

1477具有自动存储持续时间的变量不能存储在命名地址空间中

1478不能使用命名地址空间限定类型

1479函数类型不能用命名地址空间限定

1480字段类型不能用命名地址空间限定

1481定点值不适合所需的浮点类型

1482定点值不适合所需的整数类型

1483值不适合所需的定点类型

1484选项“named_registers”只能在编译 C 时使用

1485此处不允许使用命名寄存器存储类

1486<实体>使用不兼容的命名寄存器存储类重新声明

1487不能为别名变量指定 named-register 存储类

1488named-register 存储说明符已在使用中

1489选项“embedded_c”不能与控制单个嵌入式 C 功能的选项组合使用

1490无效EDG_BASE目录:

1492: <entity>行的预定义宏条目无效: <reason>

1493 无效的宏模式名称 <entity>

1494预定义宏<实体>的不兼容重定义

1495重新声明<实体>缺少命名寄存器存储类

1496命名寄存器对于变量的类型来说太小

1497不能使用命名寄存器存储类声明数组

1498const_cast枚举类型是非标准的

1499选项“embedded_c”只能在编译 C 时使用

1500__svc 参数 <entity> 不在 Thumb SVC 指令的允许范围内(0 到 )

1501__svc或__svc_indirect函数的参数过多

1502__svc或__svc_indirect函数的参数必须具有整数类型

1503__svc_indirect函数必须有参数

1504函数的第一个参数必须具有整__svc_indirect类型

1505__svc或__svc_indirect函数的结果必须在整数寄存器中返回

1506源文件<实体>格式不正确

1507写入 <entity> 文件时出错:<reason>

1508不能重载仅由函数限定符区分的函数

1509函数限定符 <entity> 不允许在虚拟成员函数上使用

1510函数“__attribute__((__<entity>__))”存在于覆盖的虚函数<entity>上必须存在于覆盖函数上

1511函数限定符 <entity> 在重写的虚拟函数 <entity> 上不相同

1512函数限定符 <entity> 存在于覆盖的虚函数 <entity> 上必须存在于覆盖函数上

1513此处不允许使用命名地址空间限定符

1514 空初始值设定项对于未指定绑定的数组无效

1515函数返回不完整的类类型 <type>

1516<entity> 已初始化;类外初始值设定项将被忽略

1517声明隐藏<实体>

1518 不能在命名地址空间中分配参数

1519定点或浮点常量上的后缀无效

1520 寄存器变量不能在命名地址空间中分配

1521预期的“SAT”或“默认”

1522<entity>没有相应的成员运算符 delete<entity>(如果在初始化已分配对象期间引发异常,则调用)

1523 线程局部变量不能用“dllimport”或“dllexport”声明

1524 函数返回类型不能使用命名地址空间进行限定

1525 不能为元素具有非平凡析构函数的灵活数组成员指定初始值设定项

1526 不能为间接灵活数组成员指定初始值设定项

1527无效的 GNU 版本号:

1528忽略在带括号的初始值设定项之后出现的变量属性

1529此转换的结果不能用作左值

1530否定无符号定点值

1531此时不允许使用此运算符;使用括号

1533寄存器名称只能用于寄存器变量

1534named-register 变量不能具有 void 类型

1536参数不能有链接范围说明符

1537多链接范围说明符

1538链接范围说明符只能出现在具有外部链接的函数和变量上

1539重新声明不能削弱链接范围

1540此声明不允许使用链接范围说明符

1541全局范围声明中的非标准限定名称

154264 位整数类型隐式转换为更小的整数类型(潜在的可移植性问题)

1543将 64 位整数类型显式转换为较小的整数类型(潜在的可移植性问题)

1544从指针转换为相同大小的整数类型(潜在的可移植性问题)

1546类定义中不允许使用友元说明符;忽略友元说明符

1547只有静态变量和外部变量可以使用线程本地存储

1548多个线程本地存储说明符

1549未定义虚拟<实体>(并且无法在其他地方定义,因为它是未命名命名空间的成员)

1550注释或字符/字符串文本之外的源行中的回车符

1551表达式必须具有定点类型

1552访问说明符的无效使用被忽略

1553指针转换为布尔值

1554指向成员的指针转换为 bool

1555存储说明符被忽略

1556在类模板上忽略 DLLEXPORT 和 DLLIMPORT

1557基类 DLLexport/DLLIMPORT 规范与派生类的规范不同

1558重新声明无法将 dllexport/dllimport 添加到 <entity>

如果禁止显示此消息,则行为就像省略了 dllexport 或 dllimport 一样。例如:

void f(void);
__declspec(dllimport) void f(void) { } /* suppress treats asvoid f(void) { } */

1559假定 dllexport/dllimport 与 <entity>od; dllexport 冲突

这表示实体同时标记为 dllimport 和 dllexport。在这种情况下,编译器假定实体是 dllexport

在以下示例中,函数定义 foo() 与声明 __declspec(dllimport) void foo() 冲突。在这种情况下,编译器假定 dllexport

---test.cpp---
__declspec(dllimport) void foo();
void foo()
{
}
------------
armcc -c test.cpp
"test.cpp", line 3: Warning: #1559-D: dllexport/dllimport conflict with "foo" (declared at line 1); dllexport assumed
fromelf -s test.o
...
# Symbol Name   Value       Bind Sec Type Vis Size
====================================================================
6 _Z3foov       0x00000000  Gb   1   Code Pr  0x4
...

警告消息和符号可见性表明函数 foo() 是假定为 dllexport 的。

1560无法定义 dllimport 实体

1561DLLexport/DLLIMPORT 需要外部链接

1562用 dllexport/dllimport 声明的类的成员本身不能用这样的说明符声明

1563在具有 DLL 接口的类中使用不带 DLL 接口的类类型的字段

1564括号内的成员声明不规范

1565忽略行拼接中的反斜杠和换行符之间的空格

1566dllexport/dllimport 与 <entity>od; dllimport/dllexport 冲突已删除

1567 匿名成员类的无效成员 -- 类<类型>具有不允许的成员函数

1568非标准reinterpret_cast

1569位置格式说明符不能为零

1570 局部类无法从封闭函数引用可变长度数组类型

1571成员<实体>已具有显式 dllexport/dllimport 说明符

1572 函数返回类型中不允许使用可变长度数组

1573指向类型为 <type> 的成员的指针中不允许使用可变长度数组类型

1574 语句表达式的结果不能具有涉及可变长度数组的类型

1575内联汇编程序不支持加载/存储转换。使用嵌入式汇编程序或离线汇编程序

1576 内联汇编程序不支持标志设置乘法指令。使用嵌入式汇编程序或离线汇编程序

1577内联汇编程序不支持使用常量操作数设置标志的 MOV/MVN 指令。使用嵌入式汇编程序或离线汇编程序

1578 自动变量上忽略 ASM 名称

1579无法内联:未知的异常处理代码

1581无法优化:此函数禁止循环分析 - 需要最大值作为内部函数

1582无法优化:此可变大小专用数组禁止并发

1583 不允许写入输出文件。输出抑制

1584:无法优化:无法转换临时变量

1585与功能相关的错误

1586用户禁用一个循环中的混合数据大小

1587:无法优化:此行中的数据类型会阻止循环优化

1588无法优化:无法转换此循环出口

1589非法数组维度

1590:无法优化:太大而无法优化 - 减小文件或循环大小

1591非法算术表达式

1592不平衡括号

1593:无法优化:使用无符号索引会阻止优化

1594:无法优化:循环参数必须为整数才能进行完全优化

1595内在函数的参数数量非法

1596:无法优化:函数引用阻止高级循环优化

1597不允许长度为 0 的字符串

1598无法优化:从一个循环传递到另一个循环传递的标量值反馈

1599:无法优化:没有足够的有用工作来优化

1600无法优化:无法转换此类型转换

1601不正确的 elseif 语句

1602非法子程序

1603循环嵌套不当

1604:无法优化:引用此函数会禁止优化

1605语句将行扩展超过缓冲区的大小

1606写入输出文件时出现问题 -- 检查权限

1607数组未声明

1608切换错误 - 关键字不正确

1609:无法优化:例程对于某些优化来说太大

1610环路没有出口

1611规范语句中的语法非法

1612无法优化:潜在的多存储冲突

1613无法优化:多存储冲突

1614非法符号

1615无法优化:循环迭代之间的潜在反馈

1616无法优化:数组元素的反馈

1617无法优化:循环太复杂

1618无法优化:具有非单位步幅的混合数据类型

1619声明和使用的下标数量不匹配

1620内部故障:转换失败。请联系您的供应商

1621优化:消除死代码

1622未引用的标签

1623缺少标签

1624:无法优化:重叠条件过多,无法进行高效翻译

1625未处理条件散射

1627无法优化:循环参数太复杂

1628:无法优化:字符数据类型阻止优化

1629:无法优化:迭代计数太短,无法进行数组优化

1630缺少>

1631未知语句

1632优化:取消了提升标量

1633没有为此符号提供隐式数据类型

1634无法优化:分支到循环

1635无法优化:循环嵌套太深

1636无法优化:变量的复杂使用

1637未知编译指示 - 忽略

1638 无法确定临时标量的最后一个值

1639如果可能,使用 nolstval 指令

1640无法优化:在不同条件下使用标量会导致反馈

1641无法优化:数据依赖关系问题过多

1642可能无法优化:由于等效性,可能存在数据依赖性 - 请检查

1643优化:推广环绕标量

1644预期的左括号

1645预期的变量名称

1646预期的数组下标

1647预期的右括号

1648预计生产线结束

1649等价错误

1651无法优化:此循环中使用的数据类型不可用

1652全局流遍历(前向)失败

1653全局流遍历(向后)失败

1654形式参数可能不等价

1655优化:使用运行时单位步幅测试制作的矢量版本

1656编译指示语法中的问题

1657内在函数参数的类型错误

1658硬件不支持 32 位整数乘

1659无法优化:存储重叠加载 - 无法分析对齐方式

1661:无法优化:无法优化向后传输

1662无法优化:需要提升标量的最后一个值

1663无法优化:循环外的分支阻止转换

1665优化:消除重复子表达式

1666参数形状不匹配

1667间接寻址已关闭

1668优化:阵列去线性化

1669非法函数语句

1670优化:if循环转换为for循环

1671找不到输入文件

1672无法优化:不支持大于 int 的数据大小

1673优化:If 循环转换为 while 循环

1674不允许使用假定的形状、大小、可分配或指针

1675无法优化:外循环已使用循环索引

1676:无法优化:此语句阻止循环优化

1677: 内部错误:未知的词法处理状态。请联系您的供应商

1678无法优化:此循环无法进行矢量化

1679优化:循环矢量化

1680共同数组的维数值必须为常数

1681开关输入错误

1682无法优化:拆分条件缩减会阻止循环转换

1683无法优化:存储到函数中

1684忽略数组上的 & 运算符

1685操作数和运算符不匹配

1686无法优化:冒号语法阻止分析

1687无法优化:约简函数被抑制 - 需要关联转换

1688解决不明确的下标问题

1689不支持的操作

1690无法优化:显式向量运算不支持的数据类型

1691优化:循环与上一个循环融合

1692int

1693零大小的物体

1694无法优化:循环过大

1695非法字符:

1696数组元素的反馈,第 %s1 行发生冲突。(%s2

1697无法优化:此 I/O 语句阻止循环优化

1698回报不可优化

1699停止不可优化

1700 不能为常量参数赋值

1701优化:使用分支删除

1702已使用但此时未定义的变量

1703未使用此定义

1704此处不允许使用用户功能

1705已使用但从未定义的变量

1706非法声明

1707:无法优化:分支太复杂,无法在此优化级别进行优化

1708无法优化:行太长 - 拆分为更小的行

1709:无法优化:条件标量阻止优化外部循环

1710无法优化:迭代计数中的用户函数引用

1711空循环体

1712内部临时淘汰

1713无法优化:外部循环设置内部循环迭代计数

1714无法优化:外循环有条件地执行内循环

1715无法优化:自动阵列阻止内联扩展

1716无法优化:行太长 - 拆分为更小的行

1717内部故障:程序转换停止。请联系您的供应商

1718无法优化:与循环变量关联的指针会阻止分析

1719自动阵列不能放在公共区域

1720无法优化:此语句禁止循环转换

1724用户逻辑指令阻止翻译

1729存储到位宽变量的潜在位溢出

1730沿此循环未执行索引

1731无法优化:内部依赖产生外部依赖

1732常量是数字或字符过多

1733在指令中使用但未声明的数组

1734不平衡端

1735缺少 endif(s)

1736无法优化:分支到 if

1739编译指示后面的多余字符

1740变量已定义但从未使用

1741无法优化:潜在反馈(等价)

1742无法优化:数组元素的反馈(等价数组)

1743无法优化:循环参数在循环中重置

1745无法优化:由于指针导致的潜在数据依赖性,如果正常,请使用限制限定符

1746 子程序名称不能用作变量

1749函数引用中的参数数量不一致

1750优化:循环重新滚动

1751可能无法优化:输入包含保留字

1752非法使用 =

1754不处理 Dim 和 mask 参数

1755:无法优化:无法处理这些向量常量

1756无法优化:无法转换此转换函数

1757优化:处理此函数所需的关联转换

1759:无法优化:非单位步幅干扰矢量优化

1760此指令的指定范围无效 - 忽略

1771无法优化:挥发性项目阻止分析

1773无法优化:生成的表达式太复杂

1774超出优化后允许的最大符号数

1775无法优化:GNU 扩展阻止内联

1789:无法优化:数组维度太小,无法优化

1790无效的参数语句

1791未找到例程的源

1792读取扩展文件时出错

1793扩展例程太大,无法自动扩展

1794解析扩展例程时遇到错误

1795扩展调用时的参数表达式无效

1796参数目录表溢出

1797调用和扩展例程之间的参数不匹配

1798:无法优化:嵌套级别太深,无法自动扩展

1799内部故障:生成的新标签过多。请联系您的供应商

1800无法优化:超出了扩展函数的最大数量

1801优化:功能扩展

1802在输入文件中找不到函数的源

1803无法优化:循环增量为 0

1805无法优化:未处理位常量

1807无法优化:内联扩展中的表溢出

1808变量仅作为形式参数出现

1809扩展例程中的函数与非函数冲突

1810迭代计数表达式中的溢出

1811赋值语句左侧的参数常数

1812参数数量冲突的函数引用

1813函数定义冲突

1814无法优化:代码大小影响优化

1816缺少 if 或大括号

1819年:缺少 的结尾

1820 这两种数据类型之间无法转换

1821逻辑表达式错误

1822无法优化:数据太复杂,无法进行此缩减操作的矢量化

1823无法优化:函数作为参数传递

1824无法优化:没有足够的向量运算来证明翻译的合理性

1825无法优化:无法矢量化复杂条件

1826无法优化:并行语法阻止扩展

1828在这种情况下,字符是非法的

1829无法优化:字节数据类型不支持矢量化

1831优化:常数传播

1832年:定义已删除

1833生成函数的声明冲突

1834打开输出文件时出错(权限可能被拒绝)

1835指令放置不当 - 被忽略

1838排列指令的不恰当参数 - 被忽略

1840年:术运算的顺序可能已更改

1841年:此循环需要剥离挖掘

1842重复的重新维度声明 - 指令被忽略

1843扩展例程中的重复标签

1844年:扩展例程中的标签过多

1845算术表达式减少为非法除以 0

1846整数常数不在允许的范围内

1847无法优化:使用指针变量

1849参数必须是非负整数常量或参数

1850无法优化:展开参数过大

1853无法优化:循环包含太多语句,无法展开

1858无法优化:约简标量类型不匹配

1861:无法优化:此存储到数组中会阻止优化外部循环

1864:无法优化:没有足够的工作来证明并发优化的合理性

1866无法优化:非整数下标

1877无法优化:在循环外使用循环索引

1885无法优化:循环边界超出数组尺寸

1886:优化:使用并行截面优化的循环

1887年:需要预订

1888无法优化:矢量化数据类型不合适

1889无法优化:由于程序大小,禁止生成备用代码

1890嵌套大于 9 的命令文件

1891程序语句无效

1892无法优化:使用逻辑数组会阻止矢量化

1893-k 选项中的错误 -- 忽略

1894优化:为了避免依赖,迭代从循环中剥离出来

1895优化:如果消除,则为冗余

1896优化:简化逻辑子句

1902年:实际参数维度小于临时参数维度

1903参数的数据类型不匹配

1904无法优化:标量实际参数传递给临时数组参数

1909无法优化:临时数组的宽度与实际数组的宽度不匹配

1910无法优化:语句抑制扩展

1911无法优化:用作函数引用的子例程

1912无法优化:调用语句中使用的函数阻止扩展

1913年:指令中的参数列表不正确

1915无法优化:Switch 使用字符参数抑制扩展

1916无法优化:常量参数抑制内联扩展

1917无法优化:常量参数是读取的目标

1918无法优化:用户并行指令禁止转换

1919:无法优化:无法确定字符子字符串长度

1920不允许在 include 语句上使用标签

1921可在定义之前使用

1922:无法优化:无法确定临时数组和/或实际数组的宽度

1923无法优化:如果语句未展开,则算术中的函数

1924实际阵列宽度和临时阵列宽度之间的潜在差异

1925年:非法使用未下标的阵列

1926年:不能在赋值的左侧有常量或函数

1927年:赋值左侧的参数是非法的

1928年:作业的左侧有1个以上的操作数

1930年:预期等号,忽略行的余数

1931年:预期的右括号,假设一个

1932无法优化:自动扩展的符号太多

1933无法优化:传递给 do-loop 索引的数组或常量参数会阻止扩展

1935年:指令具有无效或缺失的参数列表

1936预期的正整数 - 无效的参数

1937预期变量 - 参数无效

1938未找到变量

1939年:表溢出

1942无法优化:没有足够的可矢量化工作来证明翻译的合理性

1945无法优化:找到内联装配块

1947无法优化:无法转换数据类型和操作的这种组合

1948PGO:热循环;优化默认值被覆盖。

1949PGO:冷回路;优化被抑制。

1950PGO:热函数;优化默认值被覆盖。

1951PGO:冷功能;优化被抑制。

1952PGO:热回路;不变IF去除完成。

1953PGO:冷回路;抑制不变的IF去除。

1954PGO:热循环;默认内联条件被覆盖。

1955PGO:冷回路;内联抑制。

1956PGO:热循环;启用展开。

1970无法优化:符合性问题

1971年:不允许重复开关参数

1972:无法优化:语句函数包含优化抑制剂

1973优化:在内部循环之外移动不变

1974优化:剥离内环,剥离环移出外环

1975无法优化:存储到缺少下标的数组中会抑制外部循环

1976无法优化:无法使条件数组符合

1977无法优化:内循环问题阻止了外循环的优化

1978:无法优化:无法优化用户选择的循环

1979无法优化:此操作禁止循环转换

1980优化:在外循环之外移动不变

1981无法优化:不兼容的选项(固定、免费)阻止扩展

1982无法优化:不兼容的选项(onetrip、noonetrip)阻止扩展

1983无法优化:不兼容的选项(混合、混合)阻止扩展

1984无法优化:不兼容的选项(autodbl)阻止扩展

1985优化:循环切碎(大小)

1986优化:循环斩断(固有)

1987优化:循环切换

1988优化:生成替代代码

1991年:数据语句中数据项多于变量

1992年:数据语句中的变量多于数据项

1993年:参数数量不匹配

1994年:参数数据类型不匹配

1995年:常量或表达式传递给修改后的变量

1997优化:展开恒定长度循环

1999优化:循环将被拆分,以避免数组之间的缓存冲突

2000声明了局部变量,但从未使用 

这篇关于Keil 5 ARMCC编译错误和警告解释大全(2) 序列号1000-2000的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/579016

相关文章

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

使用Python检查CPU型号并弹出警告信息

《使用Python检查CPU型号并弹出警告信息》本教程将指导你如何编写一个Python程序,该程序能够在启动时检查计算机的CPU型号,如果检测到CPU型号包含“I3”,则会弹出一个警告窗口,感兴趣的小... 目录教程目标方法一所需库步骤一:安装所需库步骤二:编写python程序步骤三:运行程序注意事项方法二

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

Windows环境利用VS2022编译 libvpx 源码教程

libvpx libvpx 是一个开源的视频编码库,由 WebM 项目开发和维护,专门用于 VP8 和 VP9 视频编码格式的编解码处理。它支持高质量的视频压缩,广泛应用于视频会议、在线教育、视频直播服务等多种场景中。libvpx 的特点包括跨平台兼容性、硬件加速支持以及灵活的接口设计,使其可以轻松集成到各种应用程序中。 libvpx 的安装和配置过程相对简单,用户可以从官方网站下载源代码

秒变高手:玩转CentOS 7软件更换的方法大全

在 CentOS 7 中更换软件源可以通过以下步骤完成。更换源可以加快软件包的下载速度,特别是当默认源速度较慢时。以下是详细步骤: 前言 为了帮助您解决在使用CentOS 7安装不了软件速度慢的问题,我们推出了这份由浪浪云赞助的教程——“CentOS7如何更换软件源加快下载速度”。 浪浪云,以他们卓越的弹性计算、云存储和网络服务受到广泛好评,他们的支持和帮助使得我们可以将最前沿的技术知识分

【经验交流】修复系统事件查看器启动不能时出现的4201错误

方法1,取得『%SystemRoot%\LogFiles』文件夹和『%SystemRoot%\System32\wbem』文件夹的权限(包括这两个文件夹的所有子文件夹的权限),简单点说,就是使你当前的帐户拥有这两个文件夹以及它们的子文件夹的绝对控制权限。这是最简单的方法,不少老外说,这样一弄,倒是解决了问题。不过对我的系统,没用; 方法2,以不带网络的安全模式启动,运行命令行,输入“ne