VC和GCC已经回答了问题 How do I show the value of a #define at compile-time? 但是可以用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
在component.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