3

Question has been answered with VC and GCC in How do I show the value of a #define at compile-time? but is it possible to do it with ARM RVCT? Actually I can do my own macro2string convertion as RVCT doesn't have stringification support. But I didn't even find "#pragma message" support in RVCT. It seems it has only something like

#pragma diag_error 223

which you must specify a tag, you can not freely output a string.

In fact I work on some legacy code now, here is an simplified example from the code base:

in product_conf.h:

#define VALUE_A 1

in platform_conf.h:

#ifndef VALUE_A
#define VALUE_A 2
#endif

in component_conf.h:

#ifndef VALUE_A
#define VALUE_A 3
#endif

in component.c:

#include product_conf.h
#include platform_conf.h
#include component_conf.h

It is a bit difficult to know VALUE_A is 1 or 2 or 3 when you are reading the component.c, actually in the real cases there can be 4~5 layers configurations and the c files may include or not include some certain conf.h, you have to go through the different header files case by case. So I thought something like:

/* 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))

will help for a quick check, I just make the component and I will find out what is defined in the compiling output. This is doable with GCC, but I want to know how to do similar things with ARM RVCT. or the only way to do it is:

#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
Community
  • 1
  • 1
xdan
  • 653
  • 1
  • 8
  • 17

0 Answers0