作用域和链接属性


生存域问题

下面的代码会报错

#include <stdio.h>
#include <stdlib.h>

void func(void);

int main(void)
{
    
    func();
    count++;
    printf("In main,count=%d\n",count);
    return 0;
}

int count;
void func(void)

{
    
    count++;
    printf("In func ,count=%d\n",count);
}

因为C语言的从上到下的作用域规则,count在没声明之前找不到,会进行报错。
如果要告诉编译器,该变量在其他地方已经定义,

#include <stdio.h>
#include <stdlib.h>

void func(void);//告诉编译器,文件中一定有这个函数的定义,先别忙着报错

int main(void)
{
    extern int count;
    func();
    count++;
    printf("In main,count=%d\n",count);
    return 0;
}

int count;
void func(void)

{
    count++;
    printf("In func ,count=%d\n",count);
}

变量和声明

在这里插入图片描述

链接属性

在这里插入图片描述
先生成汇编再生成机器代码后和lib库链接生成可执行文件。
编译过程详解
预处理(Pre-Processing)-- 对 C 语言进行预处理,生成 test.i 文件 编译(Compiling)-- 将上一步生成的 test.i 文件编译生成汇编语言文件,后缀名为 test.s 汇编(Assembling)-- 将汇编语言文件 test.s 经过汇编,生成目标文件,后缀名为 test.o 链接(Linking)-- 将各个模块的 test.o 文件链接起来,生成最终的可执行文件
在这里插入图片描述
在这里插入图片描述
多个c文件的编译过程

#include <stdio.h>
void a(void);
void b(void);
void c(void);
int count;
int main()
{
a();
b();
c();
printf("XXXXX%d次\n",count);
return 0;
}

举例

extern int count ;
void a(void)
{
count++;
}

在这里插入图片描述
在这里插入图片描述

#include <stdio.h>
void a(void);
void b(void);
void c(void);
static  int count;//就会取消extern的作用 变成内部变量
int main()
{
a();
b();
c();
printf("XXXXX%d次\n",count);
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值