52>>extern

gcc编译器编译程序有四个阶段,预处理、编译、汇编、链接。预处理阶段会将源代码中的包含的头文件如stdio.h编译进来;编译阶段,gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc把代码翻译成汇编语言;汇编阶段是把编译阶段生成的”.s”文件转成二进制目标代码;链接阶段就是将目标文件链接成可执行文件。

extern的作用就是在汇编阶段告诉编译器放过extern声明的变量(编译器对没有定义的变量会报错),这个变量的定义在其他文件中;然后在链接时找到引用的其他文件中的变量。这个变量在其他文件中必须时全局变量。如果这个变量被多次定义,将会出错。并且这个变量最好不要在头文件中进行定义。

时间: 2024-10-01 01:29:12

52>>extern的相关文章

Linux0.11内核剖析--初始化程序(init)

1.概述 在内核源代码的 init/目录中只有一个 main.c 文件. 系统在执行完 boot/目录中的 head.s 程序后就会将执行权交给 main.c.该程序虽然不长,但却包括了内核初始化的所有工作.因此在阅读该程序的代码时需要参照很多其它程序中的初始化部分.如果能完全理解这里调用的所有程序,那么看完这章内容后你应该对Linux 内核有了大致的了解.从本文开始,我们将接触大量的 C 程序代码,因此读者最好具有一定的 C 语言知识.最好的一本参考书还是 Brian W. Kernighan

[MetaHook] Quake OpenGL function

Quake OpenGL function for MetaHook plugin. Thank hzqst :D QGL.h 1 #ifndef QGL_H 2 #define QGL_H 3 4 #include <gl/gl.h> 5 #include <gl/glext.h> 6 7 extern void (APIENTRY *qglAccum)(GLenum op, GLfloat value); 8 extern void (APIENTRY *qglAlphaFun

[MetaHook] Quake Bink function

If you want to play Bink video in game, maybe you need this code. QBink.h 1 #ifndef QBINK_H 2 #define QBINK_H 3 4 #include "bink.h" 5 6 extern void PTR4* (RADEXPLINK *qBinkLogoAddress)(void); 7 extern void (RADEXPLINK *qBinkSetError)(const char

利用yacc和lex制作一个小的计算器

买了本<自制编程语言>,这本书有点难,目前只是看前两章,估计后面的章节,最近一段时间是不会看了,真的是好难啊!! 由于本人是身处弱校,学校的课程没有编译原理这一门课,所以就想看这两章,了解一下编译原理,增加一下自己的软实力.免得被别人鄙视. 一.安装yacc和lex 我是在Windows下使用这两个软件的.所以使用bison代替yacc,用flex代替lex.两者的下载地址是http://sourceforge.net/projects/winflexbison/ 我的gcc环境是使用以前用过

头文件与源文件中都分别存放哪些东西

    在C代码文件中,我们经常会看到两类文件:                                         一类是:".h"文件                                         一类是:".c"文件    ".h"文件,就是我们常说的头文件.    ".c"文件,就是我们常说的源代码文件.      而在做开发的时候,经常不知道要把哪些东西放到".h"文

一个比较妙的头文件工具

具体的使用方法一般是自己配置,所有开关都在namespace 的开头. 然后在Linux下的mmap要求使用文件输入(提交前请关闭文件开关). 如果使用了algorithm库请在max.min前加上::(如::max(a,b)). 如果有变量名冲突需要请取消namespace的注释,并且更改using部分. 这里的write.max.min在std>=c++11支持任意参数(N>=1)的运行,write默认使用cout,Split为分隔符. 如果有需要请自行调节,可以加上__inline__

OC高效率52之多用类型常量,少用#define预处理指令

// //  ViewController.m //  OC高效率52之多用类型常量,少用#define预处理指令 /**  *     1. 不要用预处理定义常量.这样定义出来的常量不含类型信息,编译器只是会在编译前据此执行查找与替换操作.即时有人重新定义了常量值,编译器也不会产生警告信息,这将导致应用程序中得常量值不一致.        2.在实现文件中使用static const 来定义"只在编译单元内可见的常量".由于此类常量不在全局符号表中,所以无需为其名称加前缀.     

[iOS笔记]《编写高质量iOS与OS X代码的52个有效方法》:1.熟悉Objective-C

简介: 最近公司项目收尾,可以有时间看看书了.<编写高质量iOS与OS X代码的52个有效方法>这本书讲解了很多iOS开发的技巧和规范,大力推荐! 下面是自己看书时整理的笔记,照惯例先上目录: 目录: 第一章:熟悉Objective-C 第二章:Object.Message.Runtime 第三章:接口与API设计 第四章:Protocol与Category 第五章:内存管理 第六章:Block与GCD 第七章:系统框架 第一章    熟悉Objective-C 第1条:了解Objective

iOS开发中的那些的约定俗成(1)————《编写高质量iOS与OS X代码的52个有效方法》读书笔记(第一章)

iOS开发中的那些的约定俗成(1) ----<编写高质量iOS与OS X代码的52个有效方法>读书笔记(第一章) 前言 "我要成为一个高产的开发人员.""想要混的好,就得多努力." 写这些东西是因为毕竟看了书,但是看书看过去之后,也许印象不是很深刻,有些东西现在也理解不了,那我就把我理解的,现在就可以用到的东西,简单的写出来就好,让自己今后看到就能明白其中的意思. 还有就是锻炼一下表达,编辑能力,慢慢的提升自己,随时随地的都要有一个锻炼的心. 最后当然就