how to find the source of some macros
c, c++, macros
Solution
A simple, quick way to find out where a macro has been defined is to redefine the macro and check compiler's Warning/Error message.
#include <windows.h>
#define min(a,b) nonsense
mintest.cpp(3) : warning C4005: 'min' : macro redefinition
C:\Programme\Microsoft SDKs\Windows\v6.0A\include\windef.h(194) : see previous definition of 'min'
Problem
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` or `find` 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!