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等的作用是类似的。

 

posted @ 2022-04-13 09:24  kingzhan  阅读(327)  评论(0编辑  收藏  举报