目录
#define __STM32_PIN(index, gpio, gpio_index) \
{ \
index, GPIO##gpio##_CLK_ENABLE, GPIO##gpio, GPIO_PIN_##gpio_index \
}
##的用法
上面是rtthread中的一段代码,注意宏定义中##的用法。这样可以简化宏定义。这段代码实际上使用一种简单易读的方法表示了一个结构体。这种方法用在STM32的gpio设置中很有意思。
#define A(x) ##x
#define B(x) #@x
#define C(x) #x
如果我们假设x=1,那么A(1)就是1,B(1)就是‘1’,C(1)就是”1“
用宏定义计算一个数组中定义的元素的个数
#define ITEM_NUM(items) sizeof(items) / sizeof(items[0])
上述代码来自rtthread
#error
在编译器中输出一条错误提示信息
例如,在cjson中判断头文件,源文件版本是否相同
#if (CJSON_VERSION_MAJOR != 1) || (CJSON_VERSION_MINOR != 7) || (CJSON_VERSION_PATCH != 12)
#error cJSON.h and cJSON.c have different versions. Make sure that both have the same.
#endif
#define static_strlen(string_literal) (sizeof(string_literal) - sizeof(""))
求字符串长度