Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to find the source of some macros

Tags:

c++

c

macros

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:

  1. from this project itself,in some source file(this is the easiest,because we can find it by some tool)
  2. from some header file of some 3rd lib ,we can grep it
  3. from c/c++ standard header file(where are they in linux?)
  4. from the os (where are they in linux?)
  5. automatically generated by the configure tool(it is bitter,i have no idea)
  6. from the compiler tool like gcc/g++,or in the makefile we can define some macro

I have some question to consult:

  1. how to differentiate them between os defined and gcc/g++ defined and configure tool generated macros? do they have some characteristic respectively?
  2. how to find the source of those defined by os or by standard C or compiler? e.g.,using grep or find utilities
  3. 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!

like image 945
basketballnewbie Avatar asked Jun 29 '12 07:06

basketballnewbie


People also ask

How do I find the source of a macro?

You should use a IDE like Eclipse where you can simply right click on the macro and click Open Declaration and it will send you to the file and line the macro is defined.

What does a macro name start with?

An internal macro should have a name that starts with an underscore; Autoconf internals should therefore start with ' _AC_ '.

Can you supply more than one argument in a macro call?

3.3 Macro Arguments To invoke a macro that takes arguments, you write the name of the macro followed by a list of actual arguments in parentheses, separated by commas. The invocation of the macro need not be restricted to a single logical line—it can cross as many lines in the source file as you wish.

What is macro name?

The macro name is what the user will use to call the macro into action. To define a macro name, the user must type Sub name() and press “enter” in the coding window of the editor. Pressing enter will automatically fill the window with the general format of an Excel macro.


1 Answers

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' 
like image 61
NorbertM Avatar answered Sep 19 '22 05:09

NorbertM