There are many places for defining a macro.When the macro is defined in our own project by us,the are easy to find the definition position for them. But when i try to learn some famous open source project,i am frequently pestered by the question:where to find the source of the macros,if i can not get it's definition,i won't understand some of them (e.g. some of them can be guessed by their name). for example,some statement from apache:
#if defined(__osf__) && defined(__alpha),
#elif defined(__NSIG)
as for my knowledge,i know there are some possible originating place for a macro:
- from this project itself,in some source file(this is the easiest,because we can find it by some tool)
- from some header file of some 3rd lib ,we can grep it
- from c/c++ standard header file(where are they in linux?)
- from the os (where are they in linux?)
- automatically generated by the configure tool(it is bitter,i have no idea)
- from the compiler tool like gcc/g++,or in the makefile we can define some macro
I have some question to consult:
- how to differentiate them between os defined and gcc/g++ defined and configure tool generated macros? do they have some characteristic respectively?
- how to find the source of those defined by os or by standard C or compiler? e.g.,using
grep
orfind
utilities - what does it mean if one macro such as
__strange___
can not be find by combing the whole machine (cd /;grep __strange___ -r
)?
Thanks for telling the principle and the method to distinguish them and ,to find the source of them!
See Question&Answers more detail:os