C语言——宏定义,宏函数

宏定义

<1>宏常量:

        #define SIZE 20

​
#include <stdio.h>
#define PI 3.14
int main(){
float r =0;
printf("input r:");
scanf("%f",&r);
float area = PI*r*r;
printf("area = %.2f\n",area);
return 0;
}

​

<2>宏使用时,采取的是原样替换

<3>宏函数

#define 宏函数名 ( 参数 1 ,参数 2) 表达式
#include <stdio.h>
void print_demo1()
{
printf("demo first\n");
}
void print_demo2()
{
printf("demo second\n");
}
void print_demo3()
{
printf("demo second\n");
}
#define TEST() print_demo1();print_demo2();
int main()
{
TEST(); //单独使用无任何副作用;
return 0;
}

1)给 if...else...语句块添加大括号。

2)宏使用 do...while(0)语句防止编译出错。

<4>字符串化运算符#

如果在宏调用时,需要把参数转换为字符串去处理,需要在参数前添加 #

<5>不定义参数宏

C99 标准中规定,允许用户定义有省略号的宏。省略号必须放在参数列表的后面,表示可选参数。你可以
用可选参数来调用这类宏。在代码中用 ... 代表。他们被保存到 __VA_ARGS__
__VA_ARGS__ : 用于在宏替换部分中,表示可变参数列表;

条件编译

一、命令行参数

#include <stdio.h>

int main(int argc,const char* args[])
{
        printf("argc=%d\n",argc);
        printf("args[0]=%s\n",args[0]);
        printf("args[1]=%s\n",args[1]);
        return 0;
}
其中 argc 是命令行中参数的个数
args 分别代表命令行中的参数

二、新代码注释

格式1:

#if 宏名
代码块
#endif
宏名为真,则编译代码块

格式2:

#if 宏名
代码块1
#else
代码块2
#endif
如果宏名为真,则编译代码块1,否则编译代码块2

三、宏是否定义的判断

格式1:

//ifndef =====> if no define
#ifndef 宏名
代码块
#endif
功能:若宏没有定义,则执行代码块

格式2:

#ifndef 宏名
代码块1
#else
代码块2
#endif
功能:若宏没有定义,则执行代码块1,否则执行代码块2
注意:条件编译在多文件编程中经常会用到

多文件编程

一、extern关键字

/ ˈ ekst ɜː n/ 外面的,外部的
功能:声明变量或函数是来源于其它文件的全局变量或全局函数
使用方法
extern 数据类型 全局变量名 ;
extern 返回值类型 函数名 ( 数据类型 参数 1, 数据类型 参数 2......)
编译(同时编译多个文件)
使用 extern 关键字声明变量或函数是来源于外部文件的全局变量或全局函数

二、多文件编程框架

1.头文件 xxx.h

                头文件.h

                                <1>防止其他头文件重复定义的宏

                                <2>其他需要使用的头文件

                                <3>函数的声明

                                <4>宏定义

                                <5>结构体或枚举类型的声明

                                <6>全局变量的声明

2. 功能文件 : xxx.c
主要存放用户编写的逻辑代码函数,不包括 main 函数
3. 组合逻辑的文件 : main.c
用于组合功能文件提供的函数接口

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值