C语言多个源程序宏定义的作用范围

一个源程序文件定义了一个宏定义,且源程序函数中用到了这宏名,然后在另一个源程序中调用到刚说的那个源程序中函数,那个宏定义要不要在声明。

宏定义分类:

(1)不带参数的宏定义

形式: #define 宏名 [宏体]
功能:可以实现用宏体代替宏名
使用实例: #define TRUE 1
作用:程序中多次使用TRUE,如果需要对TRUE的值进行修改,只需改动一处就可以了

(2)带参数的宏: #define 宏名 ( 参数表) [宏体]

宏定义作用:

(1)方便程序的修改

上面的#define TRUE 1就是一个实例

(2)提高程序的运行效率

宏定义的展开是在程序的预处理阶段完成的,无需运行时分配内存,能够部分实现函数的功能,却没有函数调用的压栈、弹栈开销,效率较高

(3)增强可读性

这点不言而喻,当我们看到类似PI这样的宏定义时,自然可以想到它对应的是圆周率常量

(4)字符串拼接

例如:
#define CAT(a,b,c) a##b##c

main()
{
printf("%d\n" CAT(1,2,3));
printf("%s\n", CAT('a', 'b', 'c');
}

程序的输出会是:

123
abc

(5)参数转化成字符串

示例:

#defind CAT(n) "abc"#n

main()
{
printf("%s\n", CAT(15));
}

输出的结果会是
abc15

(6)用于程序调试跟踪
常见的用于调试的宏有,_ L I N E _,_ F I L E _,_ D A T E _,_ T I M E _,_ S T D C _
(7)实现可变宏
举例来说:
#define PR(...) printf(_ _VA_ARGS_ _)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-07-12
宏定义分类: (1)不带参数的宏定义 形式: #define 宏名 [宏体]功能:可以实现用宏体代替宏名使用实例: #define TRUE 1作用:程序中多次使用TRUE,如果需要对TRUE的值进行修改,只需改动一处就可以了 (2)带参数的宏: #define 宏名 ( 参数表) [宏体] 宏定义作用: (1)方便程序的修改 上面的#define TRUE 1就是一个实例 (2)提高程序的运行效率 宏定义的展开是在程序的预处理阶段完成的,无需运行时分配内存,能够部分实现函数的功能,却没有函数调用的压栈、弹栈开销,效率较高
(3)增强可读性 这点不言而喻,当我们看到类似PI这样的宏定义时,自然可以想到它对应的是圆周率常量 (4)字符串拼接 例如:#define CAT(a,b,c) a##b##c main(){ printf("%d\n" CAT(1,2,3)); printf("%s\n", CAT('a', 'b', 'c');} 程序的输出会是: 123abc (5)参数转化成字符串 示例: #defind CAT(n) "abc"#n main(){ printf("%s\n", CAT(15));} 输出的结果会是abc15 (6)用于程序调试跟踪常见的用于调试的宏有,_ L I N E _,_ F I L E _,_ D A T E _,_ T I M E _,_ S T D C _
(7)实现可变宏
举例来说:
#define PR(...) printf(_ _VA_ARGS_ _)
第2个回答  2012-07-01
宏定义的作用范围是单文件作用域,假如你在文件A.CPP中用了一个宏定义
B.CPP可以声明和引用A.CPP的函数(但是A和B必须在同一个文件夹下),但是在B.CPP中没有包含A.CPP的时候不能用A.CPP的宏定义
假如包含了,不管A.CPP在哪个地方,都可以用A.CPP的宏定义本回答被网友采纳
第3个回答  推荐于2017-10-09

最好把公用的宏定义放到一个公共的头文件中,如common.h,两个源文件都包含这个头文件就可以了。

上面回答错误,只要你的函数和宏定义在一个文件中就可以了追问

追问太长写不下,你看下这个,
http://zhidao.baidu.com/question/445328472.html?quesup2

本回答被提问者采纳
第4个回答  2012-07-01
看你这个源文件包涵那个有宏的没,包涵就不用,没包涵要声明。
相似回答