宏定义,条件预编译,多文件编程

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

宏定义的用法:

#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
来避免头文件被重复包含







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值