VC 和 GCC 在 如何在编译时显示 #define 的值? 但是可以用 ARM RVCT 做到这一点吗?实际上,我可以进行自己的 macro2string 转换,因为 RVCT 不支持字符串化。但我什至没有在 RVCT 中找到“#pragma message”支持。似乎它只有类似的东西
#pragma diag_error 223
其中你必须指定一个标签,你不能随意输出一个字符串。
事实上,我现在正在处理一些遗留代码,这是代码库中的一个简化示例:
在 product_conf.h 中:
#define VALUE_A 1
在 platform_conf.h 中:
#ifndef VALUE_A
#define VALUE_A 2
#endif
在 component_conf.h 中:
#ifndef VALUE_A
#define VALUE_A 3
#endif
在组件.c 中:
#include product_conf.h
#include platform_conf.h
#include component_conf.h
在阅读component.c时很难知道VALUE_A是1还是2或3,实际上在实际情况下可能有4~5层配置,c文件可能包含或不包含某些conf.h ,您必须逐个浏览不同的头文件。所以我想像:
/* definition to expand macro then apply to pragma message */
#define VALUE_TO_STRING(x) #x
#define VALUE(x) VALUE_TO_STRING(x)
#define VAR_NAME_VALUE(var) #var "=" VALUE(var[[)]]
#pragma message(VAR_NAME_VALUE(VALUE_A))
将有助于快速检查,我只是制作组件,然后我会找出编译输出中定义的内容。这对 GCC 是可行的,但我想知道如何用 ARM RVCT 做类似的事情。或者唯一的方法是:
#if (VALUE_A==1)
#warning "VALUE_A is 1"
#elif (VALUE_A==2)
#warning "VALUE_A is 2"
#elif (VALUE_A==3)
#warning "VALUE_A is 3"
#else
#error "VALUE_A is not properly defined!"
#endif