符号函数

C++中头文件与源文件的作用详解

一世执手 提交于 2019-12-01 21:11:43
一、C++ 编译模式 通常,在一个 C++ 程序中,只包含两类文件―― .cpp 文件和 .h 文件。其中,.cpp 文件被称作 C++ 源文件,里面放的都是 C++ 的源代码;而 .h 文件则被称作 C++ 头文件,里面放的也是 C++ 的源代码。 C++ 语言支持"分别编译"(separatecompilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的 .cpp 文件里。.cpp 文件里的东西都是相对独立的,在编译(compile)时不需要与其他文件互通,只需要在编译成目标文件后再与其他的目标文件做一次链接(link)就行了。比如,在文件 a.cpp 中定义了一个全局函数 "void a(){}",而在文件 b.cpp 中需要调用这个函数。即使这样,文件 a.cpp 和文件 b.cpp 并不需要相互知道对方的存在,而是可以分别地对它们进行编译,编译成目标文件之后再链接,整个程序就可以运行了。 这是怎么实现的呢?从写程序的角度来讲,很简单。在文件 b.cpp 中,在调用 "void a()" 函数之前,先声明一下这个函数 "voida();",就可以了。这是因为编译器在编译 b.cpp 的时候会生成一个符号表(symbol table),像 "void a()" 这样的看不到定义的符号,就会被存放在这个表中。再进行链接的时候

Source Insight的使用

落花浮王杯 提交于 2019-12-01 14:44:51
一、Source Insight的6种窗口的使用。 6种窗口的作用:浏览编辑源代码。 使用Source Insight打开一个文本文档后,显示文档的窗口就叫做文档窗口,符号窗口、项目窗口、剪辑窗口、上下文窗口和关联窗口可以在菜单栏-视图中打开。 1、文档窗口 这个窗口使用起来比较复杂,下面一条条来陈述(包括编辑的一些技巧): (1)、修改窗口颜色属性:菜单栏-选项-参数-颜色标签,可以修改背景颜色、默认字体颜色、修改标记颜色等,如背景颜色改为护眼模式:R199 G237 B204。 (2)、右击文档窗口-文档选项,点击屏幕字体按钮,可以修改字体显示大小。 (3)、右击文档窗口-文档选项-勾选显示行号按钮。 (4)、右击文档窗口-文档选项-解析语言,如C语言,则Source Insight使用C语言解析该文档。 扩充1:Source Insight可以定义风格,菜单栏-选项-风格,即可以打开风格窗口,可以新建一个风格或修改一个风格。风格可以继承(和C++继承差不多)。 扩充2:如何使用风格。当选中某种语言解析文档的时候,可以定义一些固定字符以不同的风格显示出来。菜单栏-选项-参数-语言标签,选中解析文档的语言,点击关键字按钮,打开语言关键字窗口,在样式这一栏选中一种风格,然后添加关键字即可。这样文档中这个关键字就以那种风格显示了。 扩充3:如何查看和修改符号(如函数名、变量等)的风格

匈牙利法则

[亡魂溺海] 提交于 2019-12-01 08:01:52
几年以前,Charles Simonyi(他后来成为微软的著名程序员)设计了一种以前缀为基础的命名方法,这种方法后来称为"匈牙利表示法"以记念他.他的思想是根据每个标识符所代表的含义给它一个前缀.微软后来采用了这个思想,给每个标识符一个前缀以说明它的数据类型.因此,整型变量的前缀是n,长整型变量是nl,字符型数组变量是ca,以及字符串(以空类型结尾的字符数组)以sz为前缀.这些名字可能会非常古怪.比如说:lpszFoo表示"Foo"是一个指向以空字符为结尾的字符串的长整型指针. 这种方法的优点是使人能够通过变量的名字来辨别变量的类型,而不比去查找它的定义.遗憾的是,这种方法不仅使变量名字非常绕口,而且使改变变量类型的工作变得十分艰巨.在Windows3.1中,整型变量为16为宽.如果我们在开始时采用了一个整型变量,但是在通过30---40个函数的计算之后,发现采用整型变量宽度不够,这时我们不仅要改变这个变量的类型,而且要改变这个变量在这30--40个函数中的名字. 因为不切实际,除了一些顽固的Windows程序员外已经没有人再使用"匈牙利表示法"了.毫无疑问,在某种场合它依然存在,但大部分人现在已经抛弃它了.一般而言,输入前缀是一种糟糕的想法,因为它把变量于其类型紧紧地绑在了一起. 对于30行以下的函数,匈牙利方法一般有优势。 尤其是对界面编程,有优势。 但对于有强烈的算法要求

测试

こ雲淡風輕ζ 提交于 2019-11-30 21:09:10
1 可以吗 一 Python基础 1、入门 1.为什么学习 Python? 2.通过什么途径学习的 Python? 3 公司线上和开发环境使用的什么系统? 4 Python 和 Java、PHP、C、C#、C++等其他语言的对比? 1.C语言,它既有高级语言的特点,又具有汇编语言的特点,它是结构式语言。C语言应用指针:可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素。C++在这方面做了改进,在保留了指针操作的同时又增强了安全性,受到了一些用户的支持,但是,由于这些改进增加语言的复杂度,也为另一部分所诟病。Java则吸取了C++的教训,取消了指针操作,也取消了C++改进中一些备受争议的地方,在安全性和适合性方面均取得良好的效果,但其本身解释在虚拟机中运行,运行效率低于C++/C。一般而言,C,C++,java被视为同一系的语言,它们长期占据着程序使用榜的前三名。 C语言的优点:简洁紧凑、灵活方便;运算符丰富;数据类型丰富;表达方式灵活实用;允许直接访问物理地址,对硬件进行操作;生成目标代码质量高,程序执行效率高;可移植性好;表达力强; C语言的缺点:C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。 C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等

无法解析的外部符号,该符号在xxx函数中被引用

此生再无相见时 提交于 2019-11-30 05:49:40
无法解析的外部符号.........,该符号在函数.........被引用 在我们敲代码的过程中,我们偶尔会遇到这个问题,这个问题大多数都是因为你自己的程序有问题,而不是缺少相应的库文件。话不多说,直接看例子: 在上面报错信息中,我们可以看到一堆看不懂的符号,那些都不重要, 主要看那个无法解析的外部符号 : D3DApp::~D3DApp(void);一般来说都是这个函数出现了问题,有可能是你定义了这个函数却没有去实现它,这种错误一般不会在编译时提示,因为它符合语法,但是无法build。而我这里是因为我引入了别的工程的文件,却没有将文件添加到这个项目中,导致我调用这个函数时编译器找不到这个函数的定义。 来源: https://www.cnblogs.com/yaya12138/p/11564265.html

Std C Library

陌路散爱 提交于 2019-11-30 03:37:19
//*****************************************// // STD C 库 // //*****************************************// <assert.h> Macro: void assert(int expression) //在debug时使用,诊断功能 它可用于验证程序做出的假设,并在假设为假时输出诊断消息。 --------------------------------------------------- 宏定义如下: #define assert(ignore) ((void)0) <limit.h> Macro: CHAR_BIT 8 定义一个字节的比特数。 SCHAR_MIN -128 定义一个有符号字符的最小值。 SCHAR_MAX 127 定义一个有符号字符的最大值。 UCHAR_MAX 255 定义一个无符号字符的最大值。 CHAR_MIN 0 定义类型 char 的最小值,如果 char 表示负值,则它的值等于 SCHAR_MIN,否则等于 0。 CHAR_MAX 127 定义类型 char 的最大值,如果 char 表示负值,则它的值等于 SCHAR_MAX,否则等于 UCHAR_MAX。 MB_LEN_MAX 1 定义多字节字符中的最大字节数。 SHRT_MIN -32768

【C/C++】复合类型(自定义类型)

杀马特。学长 韩版系。学妹 提交于 2019-11-29 00:50:57
gcc编译器 gcc(GNU Compiler Collection,GNU 编译器套件),是由 GNU 开发的编程语言编译器。gcc原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,gcc同样适用于微软的Windows。 gcc最初用于编译C语言,随着项目的发展gcc已经成为了能够编译C、C++、Java、Ada、fortran、Object C、Object C++、Go语言的编译器大家族。 编译命令格式: gcc [-option1] ... <filename> g++ [-option1] ... <filename> 1 2 命令、选项和源文件之间使用空格分隔 一行命令中可以有零个、一个或多个选项 文件名可以包含文件的绝对路径,也可以使用相对路径 如果命令中不包含输出可执行文件的文件名,可执行文件的文件名会自动生成一个默认名,Linux平台为a.out,Windows平台为a.exe gcc、g++编译常用选项说明: 选项 含义 -o file 指定生成的输出文件名为file -E 只进行预处理 -S(大写) 只进行预处理和编译 -c(小写) 只进行预处理、编译和汇编 C语言是不跨平台的,用Java用习惯的我突然回到C,有点不适应,用SpringBoot完成的Java项目,打成jar包

VPB编译日志2

雨燕双飞 提交于 2019-11-29 00:38:54
1>------ 已启动全部重新生成: 项目: ZERO_CHECK, 配置: Debug x64 ------ 1> Checking Build System 1> CMake does not need to re-run because E:/OpenSourceGraph/VirtualPlanetBuilder_0_9_build/CMakeFiles/generate.stamp is up-to-date. 1> CMake does not need to re-run because E:/OpenSourceGraph/VirtualPlanetBuilder_0_9_build/src/CMakeFiles/generate.stamp is up-to-date. 1> CMake does not need to re-run because E:/OpenSourceGraph/VirtualPlanetBuilder_0_9_build/src/vpb/CMakeFiles/generate.stamp is up-to-date. 1> CMake does not need to re-run because E:/OpenSourceGraph/VirtualPlanetBuilder_0_9_build/applications

操作系统

孤街醉人 提交于 2019-11-28 21:35:18
C的内存分配 32bitCPU可寻址4G线性空间, 每个进程都有各自独立的4G逻辑地址, 其中0~3G是用户态空间, 3~4G是内核空间, 不同进程相同的逻辑地址会映射到不同的物理地址中. 其逻辑地址其划分如下: 正文段(code segment/text segment, .text段): 或称代码段, 通常是用来存放程序执行代码的一块内存区域. 这部分区域的大小在程序运行前就已经确定, 并且内存区域通常属于只读, 某些架构也允许代码段为可写, 即允许修改程序. 在代码段中, 也有可能包含一些只读的常数变量, 例如字符串常量等 . CPU执行的机器指令部分. ( 存放函数体的二进制代码 . ) 只读数据段(RO data, .rodata):只读数据段是程序使用的一些不会被改变的数据, 使用这些数据的方式类似查表式的操作, 由于这些变量不需要修改, 因此只需放在只读存储器中. 已初始化读写数据段(data segment, .data段):通常是用来存放程序中已初始化的全局变量的一块内存区域. 数据段属于静态内存分配. 常量字符串就是放在这里的, 程序结束后由系统释放(rodata—read only data). 已初始化读写数据段(RW data, .data):已初始化数据是在程序中声明, 并且具有初值的变量, 这些变量需要占用存储器空间,

内核基础-API命名-字符

流过昼夜 提交于 2019-11-28 18:08:53
环境安装 环境安装需要极其谨慎, 因为稍有不慎, 就需要重装系统. 驱动开发环境依赖 WDK (Windows driver kit),也就是微软的驱动开发工具包. 这个工具包里面包含了驱动程序的编译工具 , 头文件, 库等. 缺了这个, 无法编译驱动程序. WDK有很多的版本, 版本的选择很重要. 一般最好选择最新版的. 除了WDK还需要和WDK同一版本的SDK . 如果所安装的WDK,SDK或者VS错误了, 可以使用卸载工具将它们全部卸载干净再配置. 普通的卸载工具是卸载不干净的, 但以下工具可以卸天卸地卸空气: Total Uninstall(旗舰版) 项目配置 编译出来的驱动其版本必须和加载该驱动的操作系统版本一致, 例如 : 加载驱动的是win7 32位系统, 则必须将驱动项目的目标系统设置为win7 , 且驱动必须是x86体系的. 源码编写 驱动程序可以使用 C 语言项目, 也可以使用 C++ 项目, 但是, 通常使用C项目, 因为C++的项目有名称粉碎机制, 在定义函数的时候, 需要加入 extern "C" . 此外, C++编译器生成的代码不如C语言生成的代码高效, 而内核的代码会被高频繁的调用, 越高效越好. 驱动调试 编写出来的驱动实则属于系统内核的一个插件, Windows的系统内核文件为: ntoskrnl.exe ,