宏定义的用法:
#include<stdio.h>
#define PI 3.14
#define CH(x) x<='Z'&&x>='A'?tolower(x):toupper(x)
#define C(x) #x
#define INTV(n) i_##n
int main()
{
int num = 2;
printf("%lf\n",num * num * PI);
char ch = 'A';
printf("%c\n",CH(ch));
printf("hello "C(world)"\n");
int INTV(num) = 20;
printf("%d\n",INTV(num));
i_num = 200;
printf("%d\n",i_num);
return 0;
}
贴一张经过编译预处理的图
若文件名是test.c 则就可以用gcc -E test.c 对文件名进行预编译
条件预编译是指对.c 源文件进行选择性编译 主要是用来判断是否定义了宏
例如
#include <stdio.h>
int main()
{
#ifdef ONE
printf("1\n");
#else
printf("2\n");
#endif
return 0;
}gcc -E -DONE case.c //-E编译预处理 -DONE 定义ONE的宏
显示如图
用gcc -E test.c 来编译预处理test.c文件
得出的是
如图所示 都未定义宏则会输出100%
其中逻辑表达式需要在预处理阶段就能计算出来结果。例如在#if中声明变量分配空间就不对了
下面就是多文件编程
例如
文件一
int add(int a,int b){ // add.cpp
return a+b;
}文件二#include<stdio.h> //main.cpp
int main(){ printf("%d",add(1,2)); return 0}
gcc main.c add.c
这样编译是可以的,但是有可能出项隐式函数声明的问题 即调用add(2.3,3.5)会出现错误结果
可以加上头文件的调用
例如数组求和
add.h
extern int sum;
void add(int*,int);add.c
#include "add.h"
int sum = 0; //注意若定义全局变量,main函数要在调用就需要在add.h中声明extern 关键字void add(int *p,int size){
int i = 0;
for (i = 0;i < size ;i++){
sum += *(p + i);
}
}
main.c
#include<stdio.h>
#include"add.h"
int main()
{
int a[10]={2,4,3,5,6,7,1};
int size = 7;
add(a,size);
printf("%d\n",sum);
return 0;
}gcc main.c add.c 就可以了。
注意可能存在重复包含头文件的时候。
这样就要采用
#ifndef __add_h //最好和定义的头文件名类似
#define __add_h
#include "add.h"
#endif来避免头文件被重复包含

本文介绍了C语言中宏定义的使用方法,包括简单的宏替换、条件预编译及字符串化技巧。此外还展示了如何通过宏定义实现字符大小写转换,并讲解了多文件编程的基本流程与注意事项。
965

被折叠的 条评论
为什么被折叠?



