搜索
首页php教程PHP开发extern使用方法总结

extern使用方法总结

Dec 19, 2016 pm 02:33 PM
extern

extern

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

   
  extern   函数原型;   


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

 

#i nclude "stdafx.h"


  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”在函数声明中可有可无,只是用来标志该函数在本文件中定义,还是在别的文件中定义。只要你函数在使用之前声明了,那么就可以不用包含头文件了。
  
    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;



更多extern使用方法总结相关文章请关注PHP中文网!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器