Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between macro and preprocessor

From what I understand , #define blah 8 is a macro . While , # is the pre-processor directive .

Can we say #include,#if,#ifdef,etc. are also macros , or are they called something else ? Or is it that macro is just a term used for #define statements only?

Please correct me if I am wrong.

like image 794
h4ck3d Avatar asked Aug 14 '12 18:08

h4ck3d


People also ask

What is the difference between macros and macro processors?

Macro represents a group of commonly used statements in the source programming language. Macro Processor replaces each macro instruction with the corresponding group of source language statements. This is known as the expansion of macros.

Is define a preprocessor or a macro?

The #define creates a macro, which is the association of an identifier or parameterized identifier with a token string. After the macro is defined, the compiler can substitute the token string for each occurrence of the identifier in the source file.

What is a preprocessor in macro processor?

The C preprocessor is a macro processor that is used automatically by the C compiler to transform your program before actual compilation. It is called a macro processor because it allows you to define macros, which are brief abbreviations for longer constructs.


2 Answers

Lines that start with # are preprocessing directives. They are directives that tell the preprocessor to do something.

#include, #if, #ifdef, #ifndef, #else, #elif, #endif, #define, #undef, #line, #error, and #pragma are all preprocessing directives. (A line containing only # is also a preprocessing directive, but it has no effect.)

#define blah 8 is a preprocessing directive, it is not a macro. blah is a macro. This #define preprocessing directive defines the macro named blah as an object-like macro replaced by the token 8.

like image 130
James McNellis Avatar answered Oct 19 '22 03:10

James McNellis


#include, #if, etc. are features of the preprocessor.

#define blah 8

Is a preprocessor directive and declares a new macro named blah.

  • Macros are the result of a #define statement.
  • The preprocessor is a feature of C.
like image 35
qwertz Avatar answered Oct 19 '22 05:10

qwertz