extern变量定义及使用方式实例

首先查看代码结构:

root@debian:~/test# ls
main.c  Makefile  print.c  print.h

main.c的内容如下:

#include <stdio.h>
#include "print.h"

int main(int argc, char** argv)
{
        print();
        value = 12;
        print();
        return 0;
}

print.h的内容如下:

int print(void);

extern int value;

print.c的内容如下:

#include <stdio.h>
#include "print.h"

int value = 100;
int print(void)
{
        printf("value=%d\n", value);
}

Makefile的内容如下:

main:main.o print.o

main.o:main.c 
        @cc -c main.c
print.o:print.c
        @cc -c print.c

clean:
        @rm -f main *.o

运行make命令后生成了main可执行程序,执行结果如下:

value=100
value=12

从上面的实例中可以看到,print.c中定义了一个全局变量value,在main.c中使用了value,但是这个变量需要在print.h中进行extern声明。如果在头文件中不进行extern声明,编译过程不成立。

如果不想再头文件中声明的话,改为在main.c中声明也是可以的,可以做简单修改如下:

print.h的内容如下:

int print(void);

//extern int value;

main.c的内容如下:

#include <stdio.h>
#include "print.h"

extern int value;
int main(int argc, char** argv)
{
        print();
        value = 12;
        print();
        return 0;
}

执行make命令生成的main可执行程序的执行结果和前面的结果一样,可以看出通过这两种方式声明后都是可以正常使用的。

但是从另一个角度来说哪一个更好一些呢?很显然第一种声明方式好,因为耦合性更强,调用者只需要通过头文件就可以了解定义了那些外部变量,而不需要在深入的通过源文件内部了解。所以从个人角度来说,比较推荐第一种使用方式。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值