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;
extern用法汇总的更多相关文章
- C#中DllImport用法汇总
最近使用DllImport,从网上google后发现,大部分内容都是相同,又从MSDN中搜集下,现将内容汇总,与大家分享. 大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比 ...
- extern用法详解
1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义. 另外,extern也可用来进行链接指定. 2 问题:ext ...
- Linux中find命令的用法汇总
Linux中find命令的用法汇总 https://www.jb51.net/article/108198.htm
- Python Enum 枚举 用法汇总
Python Enum 枚举 用法汇总 import os import sys if sys.version_info.major + sys.version_info.minor * 0.1 &l ...
- VC++定义全局变量及extern用法
基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern有两 ...
- extern用法
Extern用法 用例子给你示范 // 1.cpp ; // 2.cpp 注意没有包含1.cpp #include <iostream> using namespace std; exte ...
- C语言中Extern用法
extern用在变量或函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”. extern修饰变量的声明. 举例:若a.c中需引用b.c中的变量int v,可以在a.c中声明extern ...
- C# 关键字extern用法
修饰符用于声明在外部实现的方法.extern 修饰符的常见用法是在使用 Interop 服务调入非 托管代码时与 DllImport 属性一起使用:在这种情况下,该方法还必须声明为 static,如下 ...
- Hibernate 注解中CascadeType用法汇总
这两天,参加一个课程设计,同时这个项目又作为一个模块镶嵌到其他项目中,考虑如此,应与原先的架构相同,因牵扯到留言和相互@功能,故数据库之间OneToOne,OneToMany,ManyToMany之风 ...
随机推荐
- UnitOfWork应用
UnitOfWork以及其在ABP中的应用 Unit Of Work(UoW)模式在企业应用架构中被广泛使用,它能够将Domain Model中对象状态的变化收集起来,并在适当的时候在同一数据库连接和 ...
- 在.NET Fiddle有趣的沙盒代码
在.NET Fiddle有趣的沙盒代码 笔者:Tony Patton | 托尼·巴顿译:PurpleEndurer,2014-11-18,第1版 C#和VB.NET开发者能够使用.NET Fiddle ...
- 在sd卡,创建目录和文件
在本文中,sd卡的情况下创建的文件和目录,介绍如何创建目录和文件的重点. 1. 路径问题(以下的样例是在Java中測试的,在Android中相同适用) 1.1 假设须要在目录中创建文件的目录存在,直接 ...
- 比float更好的页面布局inline-block
一:页面布局的发展过程 桌格设计 表格+css div+css的浮动布局 div+css的内联块布局 二:流行多年的浮动布局的优劣 优势: div+css浮动布局的优势,主要是相对于table布局来说 ...
- JavaScript中五种常见运算符
一. in运算符 in运算符希望它的左操作数是一个字符串或可以转换为字符串,希望它的右操作数是一个对象.如果右侧的对象拥有一个名为左操作数值的属性名,那么表达式返回true.例如: var point ...
- MySQL学习系列2--MySQL执行计划分析EXPLAIN
原文:MySQL学习系列2--MySQL执行计划分析EXPLAIN 1.Explain语法 EXPLAIN SELECT …… 变体: EXPLAIN EXTENDED SELECT …… 将执行 ...
- react.js 从零开始(五)React 中事件的用法
事件系统 虚拟事件对象 事件处理器将会传入虚拟事件对象的实例,一个对浏览器本地事件的跨浏览器封装.它有和浏览器本地事件相同的属性和方法,包括 stopPropagation() 和 prevent ...
- Sicily 1299 Academy Awards (map + vector)集装箱
链接:http://soj.me/show_problem.php?pid=1299&cid= Description Selected from 3,850 teams from 1,329 ...
- python 时间处理
在实践中,时间处理遇到的问题,需要 Sep 06, 2014 19:30 (UTC 时间) 和 比较当前时间,早晚.知道 此 2014-09-06 19:30 格时间表达式.因此,在处理,通缉 先将s ...
- 【Flume NG用户指南】(2)构造
作者:周邦涛(Timen) Email:zhoubangtao@gmail.com 转载请注明出处: http://blog.csdn.net/zhoubangtao/article/details ...