keil5中移植出现的问题
1、从keil5中移植出来,用gcc-arm-none-eabi 编译
D:/fold/业务文件/智能手环/环境/NK6010P1/SDK/NK6010P1V1.6.7/NuCode/sdk/include/libs_include/osa/nur_osa_mem.h:32:85: error: expected declaration specifiers or '...' before numeric constant
32 | #define NUR_MEMSET(addr, value, size) nur_memset(addr, value, size, __FILE__, __LINE__)
| ^~~~~~~~
出现问题是,我尝试重写stdio.h的函数,所以可能会发生这个错误。
stdio.h中有memset这个函数,而我还想定义它为NUR_MEMSET。所以报错
2、关于宏定义中无符号常量的问题
编译器警告这里看到个 -256 感觉是涉及到有符号的变量,解决这个问题,在宏定义后面加个U
让编译器知道这里我要用的是无符号的常量就行了
#define TEMP 0x01u
#define TEMP1 0x02u
u 就表示unsigned,ul 就表示 unsigned long型,也就是无符号的意思。常用在非符号的场景,一是为了防止编译器将它作为有符号数字进行处理,显式声明,以防万一;二是防止编译提醒符合位改变等情况。
举例:比如ox8000 这是一个16位的数,如果不加u,有的编译器认为它是个负数,然后右移这个数的时候,编译器就会提醒符号位改变,就从负数变成了正数。如果加上u,0x8000u,直接声明这是一个无符号的16位数,随便怎么移动都没事,就相当于 usigned short 。
其实这和在数字末尾加f,加l等的作用是类似的。