extern用法总结!

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;

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118798.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IntelliJ IDEA 2021.4 Beta激活码(破解版激活)

    IntelliJ IDEA 2021.4 Beta激活码(破解版激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    52
  • 使用systemctl命令启动和关闭mysql

    使用systemctl命令启动和关闭mysql以前都用service命令管理mysql,现在liunx系统升级了,又有了新的更好的方法管理系统进程,现在我们来学习如何用systemctl命令管理mysql。Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。Systemd是一个系统管理守护进程、工具和库的集合,用于取代SystemV初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。在

    2025年7月3日
    2
  • 指标异动分析「建议收藏」

    指标异动分析「建议收藏」What业务都会面对“为什么涨、为什么降、原因是什么?”,因此日常数据分析80%总是在围绕指标异动做分析,进行原因定位,常见的指标异动分析例如GMV、DAU等为何下降?Why指标异动分析有利于为业务方建立业务抓手,及时定位业务异常原因,进而制定相应的运营调整策略,保障业务正常稳定发展How1、明确异常指标波动标准(净值百分比)业务指标会随着内外部环境变动而不断变化,数据的波动主要体现在变动日期与基准日期的对比(同环比)出现上升或下降。指标波动通常分为周期性波动、突发性波动、持续性波动。**

    2022年6月10日
    52
  • 课程表app源码_课程表模板excel

    课程表app源码_课程表模板excel快乐的时光过得特别快,很快各位学生党就要迎来新学期了。课程表对学生的意义不言而喻,特别是对作息自理的大学生来说,没课程表不知道要不要上课丝毫不奇怪,这时在手机上装一个课程表App就省事多了。课程表App为数不少,但你听说过能够撩学妹泡妞的课程表App吗?今天介绍的这款课程格子,就有这么个功能。软件名称:课程格子软件版本:3.00官方版软件大小:5.98MB软件授权:免费适用平台:Android实…

    2022年10月4日
    2
  • Android项目实战_手机安全卫士splash界面

    Android项目实战_手机安全卫士splash界面

    2022年3月4日
    39
  • CSDN日报20170304——《令人比较失落的IT圈子-关于华为裁员》[通俗易懂]

    CSDN日报20170304——《令人比较失落的IT圈子-关于华为裁员》[通俗易懂]早在几年前就有人说过程序员在35岁以后如果不做管理就很难混了,如今由于近日的华为事件被炒得沸沸扬扬,显然让这多年前人们的猜测变成了现实,我今年也正好到了这个该“退休”的年龄,所以就想趁机悔恨一番。首先,澄清的一点就是,我并无意诋毁这个IT行业,我只是希望大家可以更加清除的认清这个行业。

    2022年7月17日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号