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;

extern用法总结!的更多相关文章

  1. extern用法详解

    1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义. 另外,extern也可用来进行链接指定. 2 问题:ext ...

  2. VC++定义全局变量及extern用法

    基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern有两 ...

  3. extern用法

    Extern用法 用例子给你示范 // 1.cpp ; // 2.cpp 注意没有包含1.cpp #include <iostream> using namespace std; exte ...

  4. C语言中Extern用法

    extern用在变量或函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”. extern修饰变量的声明. 举例:若a.c中需引用b.c中的变量int v,可以在a.c中声明extern ...

  5. C# 关键字extern用法

    修饰符用于声明在外部实现的方法.extern 修饰符的常见用法是在使用 Interop 服务调入非 托管代码时与 DllImport 属性一起使用:在这种情况下,该方法还必须声明为 static,如下 ...

  6. extern用法总结

    在C语言中,修饰符extern用在变量或者函数的声明前,用来说明"此变量/函数是在别处定义的,要在此处引用".1. extern修饰变量的声明. 如果文件a.c需要引用b.c中变量 ...

  7. extern用法汇总

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

  8. extern 用法,全局变量与头文件(重复定义)

    转自 https://www.cnblogs.com/chengmin/archive/2011/09/26/2192008.html 当你要引用一个全局变量的时候,你就要声明,extern int  ...

  9. 16 extern用法、常量字符串的应用

    extern声明多文件共享变量的方法总结一下: 1).在一个源文件中定义,在其他需要使用的源文件中用extern声明.(仅一处定义,多处extern) 2).在一个源文件中定义,在其对应的头文件中ex ...

随机推荐

  1. Map集合的四种遍历

    Map集合遍历 Map<String,Integer> m = new HashMap<String,Integer>(); m.put("one",100 ...

  2. KVO - 键值观察

    [基本概念] 键值观察是一种使对象获取其他对象的特定属性变化的通知机制.控制器层的绑定技术就是严重依赖键值观察获得模型层和控制器层的变化通知的.对于不依赖控制器层类的应用程序,键值观察提供了一种简化的 ...

  3. COGS 577 蝗灾 [CDQ分治入门题]

    题目链接 昨天mhr神犇,讲分治时的CDQ分治的入门题. 题意: 你又一个w*w正方形的田地. 初始时没有蝗虫. 给你两个操作: 1. 1 x y z: (x,y)这个位置多了z只蝗虫. 2. 2 x ...

  4. 偶尔转帖:AI会议的总结(by南大周志华)

    偶尔转帖:AI会议的总结(by南大周志华) 说明: 纯属个人看法, 仅供参考. tier-1的列得较全, tier-2的不太全, tier-3的很不全. 同分的按字母序排列. 不很严谨地说, tier ...

  5. PYTHON不定参数与__DOC__

    def total(initial = 5, *numbers, **keywords): count = initial for number in numbers: count += number ...

  6. USB Type-C“三剑客”: 连接器、控制器和电缆

    USB Type-C™是最新的有关电缆布线的USB连接器标准.您会看到,从笔记本电脑.智能手机.闪存到视频系统,这些设备上有一个小型可逆的Type-C连接器.由于Type-C电缆既可以给主机和设备提供 ...

  7. c#调用js,以及js调用C#里的函数, c#自己生成js代码,实现对web的控制

    using mshtml;using System;using System.Collections.Generic;using System.Linq;using System.Security.P ...

  8. Linux的线程同步对象:互斥量Mutex,读写锁,条件变量

        进程是Linux资源分配的对象,Linux会为进程分配虚拟内存(4G)和文件句柄等 资源,是一个静态的概念.线程是CPU调度的对象,是一个动态的概念.一个进程之中至少包含有一个或者多个线程.这 ...

  9. linux上怎么切换不同版本的arm-linux-gcc?只需改一行函数

    linux上怎么切换不同版本的arm-linux-gcc?只需改一行函数 ln -s /usr/local/arm/3.4.1/bin/arm-linux-gcc /usr/bin/arm-linux ...

  10. 你认为A和B所在方格颜色相同吗?

    [你认为A和B所在方格颜色相同吗? ]据说全世界只有0.003%的人和photoshop能看出它们的颜色是相同的. 我属于那 99.9997% 的人...因为我不是神...