打印

C语言外部变量的使用以及erxtern的用法

[复制链接]
4632|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
贺信|  楼主 | 2009-8-21 17:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C语言外部变量的使用以及erxtern的用法 C语言的外部变量的定义和引用对初学者来说,是个难点. 对外部变量的说明和定义不是一回事.对外部变量的说明,只是声明该变量是在外部定义过的一个全局变量..在这里引用.而对外部变量的定义,则是要分配存储单元.一个全局变量只能定义一次,却可以多次引用. 用extern声明外部变量,目的是可以在其它的文件中调用.具体使用见下面的例子: file1.c file2.c int i,j;//定义全局变量 extern int i,j;//外部变量说明 char c; extern char c; void func() void func1() { { } } 在file2.c中对外部变量i,j,c进行了说明,就可以直接调用file1.c中定义的全局变量了 静态变量static的使用 有时在中断程序中定义了变量,不希望每次进入中断程序,变量就被赋初值.这时就要使用static变量.静态局部变量在编译时赋初值,既只赋初值一次.见下例: void serial_interrupt() interrupt 4 using 3 { static uchar i="0"; i++; } 上例中,编译时,i被赋初值0,以后每进入一次中断,i+1,而不是每次进入中断,i都被请零,再加1 如果在a.c中要调用在b.c中定义的函数func(),需要在a.c中声明该函数,表示该函数在别的源文件中定义。函数是可以互相调用的,因此函数都具有外部存储种类的属性。原则上调用一个在在本程序模块文件以外的其他模块文件所定义的函数,必须用关键字extern说明被调用函数是一个外部函数。实际使用中可以省掉extern。即下面两个函数声明没有明显的区别: extern int f();和int f();

相关帖子

沙发
bin362422| | 2009-8-21 17:41 | 只看该作者
LZ写的时候注意一点啊,我还以为C中多了个关键字了!!
不过后面写对了啊,呵呵

使用特权

评论回复
板凳
john_light| | 2009-8-21 23:50 | 只看该作者
能稍微排一下版会更有利于阅读:shutup:

使用特权

评论回复
地板
auzxj| | 2009-8-21 23:58 | 只看该作者
C语言的外部变量的定义和引用对初学者来说,是个难点.

对外部变量的说明和定义不是一回事.对外部变量的说明,只是声明该变量是在外部定义过的一个全局变量..在这里引用.而对外部变量的定义,则是要分配存储单元.一个全局变量只能定义一次,却可以多次引用.

用extern声明外部变量,目的是可以在其它的文件中调用.具体使用见下面的例子:

                file1.c                                                       file2.c

        int i,j;//定义全局变量                                extern   int i,j;//外部变量说明

        char c;                                                        extern char c;

       void func()                                                    void func1()

     {                                                                     {

         }                                                                    }

在file2.c中对外部变量i,j,c进行了说明,就可以直接调用file1.c中定义的全局变量了

静态变量static的使用

有时在中断程序中定义了变量,不希望每次进入中断程序,变量就被赋初值.这时就要使用static变量.静态局部变量在编译时赋初值,既只赋初值一次.见下例:

  void serial_interrupt() interrupt 4 using 3

{ static uchar i="0";

   i++;

}

上例中,编译时,i被赋初值0,以后每进入一次中断,i+1,而不是每次进入中断,i都被请零,再加1

如果在a.c中要调用在b.c中定义的函数func(),需要在a.c中声明该函数,表示该函数在别的源文件中定义。函数是可以互相调用的,因此函数都具有外部存储种类的属性。原则上调用一个在在本程序模块文件以外的其他模块文件所定义的函数,必须用关键字extern说明被调用函数是一个外部函数。实际使用中可以省掉extern。即下面两个函数声明没有明显的区别:

extern int f();和int f();

使用特权

评论回复
5
auzxj| | 2009-8-21 23:58 | 只看该作者
楼主要有责任心,这不是第一篇不排版的了!!

使用特权

评论回复
6
冷漠| | 2009-8-22 09:20 | 只看该作者
LZ抄书最好要注明出处。否则,像下面这段话,可能会产生误导:

原则上调用一个在在本程序模块文件以外的其他模块文件所定义的函数,必须用关键字extern说明被调用函数是一个外部函数。实际使用中可以省掉extern。即下面两个函数声明没有明显的区别: extern int f();和int f();

不是所有的编译器都是这样吧?至少我这个编译器如果不加extern  函数,会提示错误。再者加上extern 便于阅读理解——查找。也许应该写成这样:
    A 文件定义了函数  
       int  f();

    B 文件引用f(),  写成:

   // from A 文件
   int f();

使用特权

评论回复
7
贺信|  楼主 | 2009-8-22 09:23 | 只看该作者
不好意思,我是电脑空间不够,看到啥就放这,好以后看看!!
  大家说的不错,以后改!!

使用特权

评论回复
8
冷漠| | 2009-8-22 11:23 | 只看该作者
呵呵。如今用这么差的电脑?即使不想换新的,也可以买个4G U盘做数据盘,50元而已。

或者,我送你个40G 移动硬盘。

这的信息说不好随时就可能丢了。一改新版,多少人叫苦不迭?5年、8年的论坛灌水一朝就没了。

使用特权

评论回复
9
huangqi412| | 2009-8-22 11:38 | 只看该作者
erxtern.........

使用特权

评论回复
10
xwj| | 2009-8-22 11:40 | 只看该作者
汗,“空间不够”?
文本、网页搜集得到什么规模才会空间不够哦~

建议LZ搞个Blog;P

使用特权

评论回复
11
贺信|  楼主 | 2009-8-24 14:03 | 只看该作者
都是电脑太落后的惹的祸!!笔记本硬盘太小了!
  见笑!!
小弟在此作揖
厄弥陀佛
放我一条生路!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

305

帖子

0

粉丝