zoukankan      html  css  js  c++  java
  • C中extern的用法

    /*
    **********************************************************************

    INPUT3.C -- Input data parser for EPANET;

    VERSION:    2.00
    DATE:       5/30/00
                9/7/00
                10/25/00
                3/1/01
                6/24/02
                8/15/07    (2.00.11)
                2/14/08    (2.00.12)
    AUTHOR:     L. Rossman
                US EPA - NRMRL

    This module parses data from each line of input from file InFile.
    All functions in this module are called from newline() in INPUT2.C.
    该模块逐行解析INPUT文件。
    该模块中的所有函数都在INPUT2.C的newline(int sect, char *line)中被调用。

    **********************************************************************
    */

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    #include <math.h>
    #include "hash.h"
    #include "text.h"
    #include "types.h"
    #include "funcs.h"
    #define  EXTERN  extern
    #include "vars.h"

    /* Defined in enumstxt.h in EPANET.C */
    extern char *MixTxt[];
    extern char *Fldname[];            //字段名称字符串数组

    /* Defined in INPUT2.C */
    extern char      *Tok[MAXTOKS];    //
    extern STmplist  *PrevPat;
    extern STmplist  *PrevCurve;
    extern int       Ntokens;

    ...

    ----------------------------------------------------

    http://www.cnblogs.com/KingOfFreedom/admin/EditPosts.aspx?opt=1

    extern

       在源文件A里定义的函数,在其它源文件里是看不见的(即不能访问)。为了在源文件B里能调用这个函数,应该在B的头部加上一个外部声明:

       
      extern   函数原型;   


      这样,在源文件B里也可以调用那个函数了。  
      注意这里的用词区别:在A里是定义,在B里是声明。一个函数只能(也必须)在一个源文件里被定义,但是可以在其它多个源文件里被声明。定义引起存储分配,是真正产生那个实体。而声明并不引起存储分配。打一个粗俗的比方:在源文件B里声明后,好比在B里开了一扇窗,让它可以看到A里的那个函数。


      1.extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。
      2.如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有区别:
      extern int f(); 和int f();
      ================================
      如果定义函数的c/cpp文件在对应的头文件中声明了定义的函数,那么在其他c/cpp文件中要使用这些函数,只需要包含这个头文件即可。
      如果你不想包含头文件,那么在c/cpp中声明该函数。一般来说,声明定义在本文件的函数不用“extern”,声明定义在其他文件中的函数用“extern”,这样在本文件中调用别的文件定义的函数就不用包含头文件
      include “*.h”来声明函数,声明后直接使用即可。
      ================================
      举个例子:
      //extern.cpp内容如下:
      
      // extern.cpp : Defines the entry point for the console application.
      //
      
      #i nclude "stdafx.h"
      extern print(char *p);
      int main(int argc, char* argv[])
      {
       char *p="hello world!";
       print(p);
       return 0;
      }
      //print.cpp内容如下
      #i nclude "stdafx.h"
      #i nclude "stdio.h"
      print(char *s)
      {
       printf("The string is %s/n",s);
      }
      
      结果程序可以正常运行,输出结果。如果把“extern”去掉,程序依然可以正常运行。
      
      由此可见,“extern”在函数声明中可有可无,只是用来标志该函数在本文件中定义,还是在别的文件中定义。只要你函数在使用之前声明了,那么就可以不用包含头文件了。

  • 相关阅读:
    美容:盐水按摩 靓肤不花钱 健康程序员,至尚生活!
    关于黑眼圈形成和应对方法! 健康程序员,至尚生活!
    女人必知25个养颜排毒美容锦囊 健康程序员,至尚生活!
    让你睡眠更香甜的九种食物 健康程序员,至尚生活!
    几款美容瘦身的花茶配方 健康程序员,至尚生活!
    吃出来的美白方法 健康程序员,至尚生活!
    达人DIY护肤经验分享 健康程序员,至尚生活!
    【男士必看】男士护肤必备攻略 健康程序员,至尚生活!
    一起学习手撕包菜如何做 健康程序员,至尚生活!
    抵制美食诱惑 春节美食瘦身建议 健康程序员,至尚生活!
  • 原文地址:https://www.cnblogs.com/KingOfFreedom/p/3314190.html
Copyright © 2011-2022 走看看