Macro expand in C programming language

Just yesterday, a question came into my mind:

When a C compiler preprocess the macro define?

 

So comes a test in Ubuntu 10.10

gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5

 

// Header file

#ifndef TEST_H__

#define TEST_H__

 

#define and +

 

#endif

 

 

// Source file

#include "test.h"

 

#define ADD(X) (X and X) 

 

void f() {

  ADD(X);

  return 0;

}

 

int main(int argc, char **argv) {

  int i=20;

  f(i);

  return 0;

}

// end of source file

 

Using the -E option in GCC to preprocess the test.c, the result is

# 1 "test.c"

# 1 "<built-in>"

# 1 "<command-line>"

# 1 "test.c"

# 1 "test.h" 1

# 2 "test.c" 2

 

 

 

void f() {

  (X and X);

  return 0;

}

 

int main(int argc, char **argv) {

  int i=20;

  f(i);

  return 0;

}

 

// End of the process

 

If we exchange the macro define (and) and (ADD) in header file and source file

we can get the following result after preprocessing.

 

# 1 "test.c"

# 1 "<built-in>"

# 1 "<command-line>"

# 1 "test.c"

# 1 "test.h" 1

# 2 "test.c" 2

 

 

 

void f() {

  (X + X);

  return 0;

}

 

int main(int argc, char **argv) {

  int i=20;

  f(i);

  return 0;

}

 

// End of the process

 

When I defined all macro in two different header file,

the macro could expand correctly, whatever order the

header file.

 

So, I think an answer could come out:

We'd better define macro in header file.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值