【C语言 学习记录】六、作用域及预处理

本文详细阐述了C语言中变量的作用域、存储方式(包括存储空间、类型和类别)、内部函数与外部函数的区别,以及预处理中的宏定义和文件包含的使用。重点讲解了不同类型的变量和如何有效地管理内存和代码复用。
摘要由CSDN通过智能技术生成

1.变量的作用域

作用域:变量在程序中的有效范围。

全局变量(外部变量):定义在所有函数外部,浪费内存单元。

局部变量(内部变量):定义在某函数或复合语句内部。

执行时优先级:局部变量>全局变量

2.变量的存储

①   存储空间

  • 程序区(代码):可执行机器指令
  • 静态存储区(数据):需占用固定存储单元的变量
  • 动态存储区(数据):不需占用固定存储单元的变量

②   变量类型

  • 动态存储变量(自动类变量)
  • 静态存储变量

③   存储类别

  • auto(动态存储类别)
  • extern(外部存储类别)
  • register(寄存器型存储类别)
  • static(静态存储类别)

④   局部变量存储类别

// ① auto型 (自动变量,默认) 
	auto int a,b;
	int a,b;
	
// ② static型 (保留值,只能定义一次) 
	static int a,b;
	
// ③ register型 (仅动态局部变量,尽量少用) 
	register int a,b;

⑤   全局变量存储类别

// ① extern型 (全局声明,可在多个文件中调用,默认) 
	extern int a,b;
	
// ② static型 (仅限于该文件) 
	static int a,b;

3.内部函数与外部函数

①   内部函数

       仅限于本源文件使用

static int add(int a,int b);

②   外部函数(默认)

       可被其他源文件调用

extern int add(int a,int b);

int add(int a,int b);

4.预处理

①   宏定义

       可用#undef终止,控制作用范围。

  • 不带参数的宏定义

           仅简单字符串替换,双引号内不替换。

    #define PI 3.14
  • 带参数的宏定义(形参)

           宏调用:实参替换形参,简单替换(形参建议打括号)。

            运行结果:z=10

    #include <stdio.h>
    #define A(a,b) (a)+(b)
    
    int main(){
        int x,y,z;
        
        x=5;
        y=3;
        
        z= A(x+y,x-y);
        printf("z=%d",z);
        return 0;
    }

②   宏定义的条件编译(用于避免重复定义)

  • 形式一

    运行结果:x=0
                      y=1

    #include <stdio.h>
    
    #define N 0
    #ifdef N
    	#define M 1
    #else
    	#define M 2
    #endif
    
    int main(){
        int x,y;
        x=N;
        y=M;
        printf("x=%d\n",x);
        printf("y=%d\n",y);
        return 0;
    }
  • 形式二

    运行结果:x=0
                      y=2

    #include <stdio.h>
    
    #define N 0
    #ifndef N
    	#define M 1
    #else
    	#define M 2
    #endif
    
    int main(){
        int x,y;
        x=N;
        y=M;
        printf("x=%d\n",x);
        printf("y=%d\n",y);
        return 0;
    }
    
  • 形式三

    运行结果:x=0
                      y=2

    #include <stdio.h>
    
    #define N 0
    #if N
    	#define M 1
    #else
    	#define M 2
    #endif
    
    int main(){
        int x,y;
        x=N;
        y=M;
        printf("x=%d\n",x);
        printf("y=%d\n",y);
        return 0;
    }

③   文件包含

       在源文件中将另一个指定文件的全部内容包含进来,即头文件。

//库函数文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//自定义文件
#include "text.c"  //用于完成某功能或一组宏定义
#include "text.h"

  • 29
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kkkkkkkiko0401

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值