zoukankan      html  css  js  c++  java
  • extern用法汇总

    extern

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

       
      extern  
    函数原型;   


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

     

    i nclude "stdafx.h"


      1.extern用在变量声明中经常有这样一个作用,你在*.c文件里声明了一个全局的变量,这个全局的变量假设要被引用,就放在*.h中并用extern来声明。

      2.假设函数的声明中带有keywordextern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有差别:
      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”在函数声明中可有可无,仅仅是用来标志该函数在本文件里定义,还是在别的文件里定义。仅仅要你函数在使用之前声明了,那么就能够不用包括头文件了。
      
        VC++6.0
    中常出现的"unexpected end of file while looking for precompiled header directive"的问题?

        怎样解决:"fatal error C1010:VC++6.0中常出现的"unexpected end of file while looking for precompiled header directive"的问题?

        我想大家在VC6.0中常常回遇到这种问题,怎样解决呢?

     1、看看是否缺少“}”  
     
    如:类,结构体后面的分号

     
    隐藏得深的是宏、.h文件的问题就要费点心思了

     2、一定是你在类的部分定义被删除了,M$在每一个类中定义一些特殊的常量,是成对的,例如以下:
     .h:
     #if !defined(AFX_CHILDFRM_H__54CA89DD_BA94_11D4_94D7_0010B503C2EA__INCLUDED_)
     #define AFX_CHILDFRM_H__54CA89DD_BA94_11D4_94D7_0010B503C2EA__INCLUDED_
     .......
     //{{AFX_INSERT_LOCATION}}
     // Microsoft Visual C++ will insert additional declarations immediately before the previous line.

     #endif // !defined(AFX_MAINFRM_H__54CA89DB_BA94_11D4_94D7_0010B503C2EA__INCLUDED_) 


     
    你能够新建一个类,然后把这些拷贝过去或补上就能够了。  
     3
    、在头部增加 #i nclude "stdafx.h"

     4、在CPP文件第一行加上#i nclude "stdafx.h"
     
    或者Rebuild All. 

     5

     1. [Project] - [Settings] - [C/C++] - [Category]
     
    2. 选择
    [Precomplied Headers]
     
    3. 单选
    [Not Using Precomplied Headers]
     
    4. [OK]


     
    假设以上不能解决这个问题,那么就请看下面内容.引起这种错误,有可能你仅仅是添加了一个.H.CPP的文件.这时你就要按上面所说.
    名含"stdafx.h"就可以.假设还要在多个文件中同一时候使用结构类型,你就要继续向下看了.一定会有不少收获的.

     类型的定义和类型变量的定义不同,
     
    类型定义仅仅是描写叙述一个类型,

     
    是给编译器看的,

     
    不会产生可运行代码。

     
    变量定义是指在运行文件里真实得存在这么一块内容。

     由于每一个.c里都要写清楚类型定义非常麻烦,
     
    所以一般都把类型定义写在.h

     
    ,而在.c里採用简单的写法,如
    struct A a;
     
    这样定义变量,

     
    不需把整个类型的描写叙述再写一遍。

     ------------------------------------------------------------------------
     
    所以,struct类型定义放到 XX.h里面,
     XX.cpp
    里加struct str st_r

     XXXXX.cpp
    加上#
    i nclude "XX.h"
     
    然后直接使用extern struct str st_r;

  • 相关阅读:
    select、poll和epoll
    Linux 常用命令之文件和目录
    SmartPlant Review 帮助文档机翻做培训手册
    SmartPlant Foundation 基础教程 3.4 菜单栏
    SmartPlant Foundation 基础教程 3.3 标题栏
    SmartPlant Foundation 基础教程 3.2 界面布局
    SmartPlant Foundation 基础教程 3.1 DTC登陆界面
    SmartPlant Foundation 基础教程 1.4 SPF架构
    SmartPlant Foundation 基础教程 1.3 SPF其他功能
    SmartPlant Foundation 基础教程 1.2 SPF集成设计功能
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4554774.html
Copyright © 2011-2022 走看看