Things About 'extern'
Note: All Learned From Here
C和Objective-C的function前面都有个隐含的extern,对于function来说,有没有extern都无所谓,但变量不一样。
declaration 声明可以无数次但定义只能有一次
声明但不定义:no memory allocation for it
extern int var;
// This could be done as many times as you want
// If we prepend extern in variable as default,then the memory for them will not be allocated ever.
definition 定义且声明一个变量:memory allocated
int var;
Examples that work
int var;
int main(void) {
var = 10;
return 0;
}
extern int var;
int main(void) {
return 0;
}
extern int var = 0; //如果有初始化 那么内存是被分配了的
int main() {
var = 10;
return 0;
}
#include "somefile.h"
extern int var;
int main() {
var = 10;
return 0;
}
// 如果somefile.h里有var的definition,那么是可行的
Examples that don't work
extern int var;
int main(void) {
var = 10;
return 0;
}
// var 被声明了但没有被定义,也就是没有被分配内存,所以赋值行为是错误的
1. Declaration can be done any number of times but definition only once.
2. “extern” keyword is used to extend the visibility of variables/functions().
3. Since functions are visible through out the program by default. The use of extern is not needed in function declaration/definition. Its use is redundant.
4. When extern is used with a variable, it’s only declared not defined.
5. As an exception, when an extern variable is declared with initialization, it is taken as definition of the variable as well.
Things About 'extern'的更多相关文章
- const,static,extern 简介
		const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ... 
- const extern static 终极指南
		const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ... 
- 16-static和extern关键字2-对变量的作用
		上一讲介绍了static和extern对函数的作用,static用来定义一个内部函数,不允许其他文件访问:extern用来定义和声明一个外部函数,允许其他文件访问.static和extern对变量也有 ... 
- 15-static和extern关键字1-对函数的作用
		一.extern与函数 如果一个程序中有多个源文件(.c),编译成功会生成对应的多个目标文件(.obj),这些目标文件还不能单独运行,因为这些目标文件之间可能会有关联,比如a.obj可能会调用c.ob ... 
- 转:C++项目中的extern "C" {}
		引言 在用C++的项目源码中,经常会不可避免的会看到下面的代码: #ifdef __cplusplus extern "C" { #endif /*...*/ #ifdef __c ... 
- extern "c"用法解析
		转自: extern "c"用法解析 - 简书 引言 C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数.但是,C++毕竟是一种面向对象的程序设计语言, ... 
- extern
		gcc编译器编译程序有四个阶段,预处理.编译.汇编.链接.预处理阶段会将源代码中的包含的头文件如stdio.h编译进来:编译阶段,gcc首先要检查代码的规范性.是否有语法错误等,以确定代码的实际要做的 ... 
- 李洪强iOS经典面试题155 - const,static,extern详解(面试必备)
		李洪强iOS经典面试题155 - const,static,extern详解(面试必备) 一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽 ... 
- extern用法总结
		在C语言中,修饰符extern用在变量或者函数的声明前,用来说明"此变量/函数是在别处定义的,要在此处引用".1. extern修饰变量的声明. 如果文件a.c需要引用b.c中变量 ... 
- 链接(extern、static关键词\头文件\静态库\共享库)
		原文链接:http://www.orlion.ga/781/ 一. 多目标文件的链接 假设有两个文件:stack.c: /* stack.c */ char stack[512]; int top = ... 
随机推荐
- 回击MLAA:NVIDIA FXAA抗锯齿性能实測、画质对照
			PC游戏玩家肯定会对各式各样的AA抗锯齿技术很熟悉,而今天本文的主角就是NVIDIA今年才推出的新型抗锯齿技术"FXAA". FXAA在某种程度上有些类似于AMD之前宣传的MLAA ... 
- java07   map
			map底层,数组加链表 集合: 是一个对象,只不过这个对象可以容纳别的对象.存放对象就是操作地址. List:是有序可重复的. Set:无顺序,不可重复,有重复则后面把前面的覆盖. Map:键值对. ... 
- patchdiff2 函数比较插件
			https://code.google.com/archive/p/patchdiff2/downloads 
- forEach、map、 for-in 、 for 、some  对比   break
			map.forEach 乱用 ,被嫌弃,现整理区别 补补基础 Array 迭代方法 1. every(): 对数组中的每一项运行给定函数,如果该函数对每一项都返回true ,则返回true. 2. f ... 
- Android_Intent_passValueForResult
			当SecondActivity需要回传参数时:1. MainActivity启动SecondActivity时需要调用startActivityForResult() 并定义请求码2. SecondA ... 
- PAT L1-009. N个数求和
			本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你输出的和也必须是有理数的形式. 输入格式: 输入第一行给出一个正整数N(<=100).随后一行按格 ... 
- "make_path" is not exported by the File::Path modul
			之前正常运行的perl脚本换了一个环境突然报 从原来的make_path 和 remove_tree改为现在的mkpath 和 rmtree就好了. File::Path version is 1.0 ... 
- linux学习记录(第六章、Linux 的文件权限与目录配置)
			书看的是鸟哥的私房菜,系统用的是centos.被微软坑了N年才发现linux才是王道. 在这里记录些学习的记录.备忘 
- uploadify上传控件使用
			uploadify是JQuery的一个上传插件,实现的效果非常不错,并且带进度显示,我将给大家演示如何使用uploadify进行图片上传, 1.点我下载http://www.uploadify.com ... 
- ACM——线性表操作
			线性表操作 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte总提交:2795 测试通过:589 描述 线性表是n个元素 ... 
