c和c++
文章平均质量分 72
u010154760
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
动态链接库的隐式连接与显式连接有什么不同
隐式链接是指在代码中使用了了库中的代码,只是在链接时,链接器会把该库的符号信息以及导入函数的信息写入到生成的Exe文件的特定的区段中。当该程序加载时,操作系统会根据这个区段中的信息,来查找每个它需要的动态库,并根据这些动态库的导出表,与程序中的导入表相配对,以确定程序中使用的动态库中的代码在什么位置。这样应用程序就能够正确是链接到动态库中的代码了。如果在这个过程中,发生了错误,比如没有找到要求的库转载 2015-05-13 12:15:24 · 1468 阅读 · 0 评论 -
VS下 debug与release运行结果不一致
摘要 VS中遇到 debug与release下运行结果不一致,太疼了VS debug release网罗了大量文章,主要说变量未初始化的较多,代码量较大,着实不好搞,依次排查,但凡涉及的都已经初始化,无果...eggs hurt~~~持续~~~最后初步敲定嫌疑:PI的问题,每次用到介个全局变量的时候就报错,把代码中PI用3.1415926****代替,无果.转载 2015-04-21 21:50:47 · 8212 阅读 · 0 评论 -
关于C语言中的未初始化变量的值
我们在刚学C编程的时候经常碰到“烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫”,这是为什么呢?先从上次某公司笔试说起,当时有一题是考到了关于变量初始化的问题。在主函数外面(全局)和里面(局部)个定义一个int类型数值。然后没有赋值,直接打印出来,问输出什么。那会只知道全局默认是0,局部是一个负的挺大的数,还以为是最小整数。回来后试了下,局部的int默认的是-858993460,即0转载 2015-04-21 21:48:44 · 1460 阅读 · 0 评论 -
野指针
野指针指指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为 NULL 避免,而只能通过养成良好的编程习惯来尽力减少。对野指针进行操作很容易造成程序错误。目录1成因▪ 指针变量未初始化▪ 指针释放后之后未置空▪ 指针操作超越变量作用域2规避▪ 初始化时置 NULL▪ 释放时置转载 2015-04-21 21:51:30 · 515 阅读 · 0 评论 -
编译链接------Linux环境下c语言静态链接库和动态链接库创建和使用
库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。面对比一下两者: 静态链接库:当要使用时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。动态库而言:某个程序在运行中要调用某个动态链接库函数的时候,操作系统首先会查看所有正在运行的程序,看在内存里是否已有此库函数的拷贝了。如果有,则让转载 2015-04-26 20:48:24 · 4335 阅读 · 0 评论 -
C++静态库与动态库
这次分享的宗旨是——让大家学会创建与使用静态库、动态库,知道静态库与动态库的区别,知道使用的时候如何选择。这里不深入介绍静态库、动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养——链接、装载与库》。什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库转载 2015-04-26 20:49:38 · 397 阅读 · 0 评论 -
文件使用二进制模式打开情况下的换行的方法
今天用VS2010写个简单的用来记录软件的日志到文件的程序,使用\n原因:对于文件,在windows平台下的换行是LRCR(“\r\n")(只针对WINDOWS的记事本工具来说,若用智能些的文本编辑器,就会换行了),, 所以在使用二进制模式打开文件,写入的时候,换行请使用\r\n,记事本工具打开肯定是正确的,但是使用一些智能文本编辑器比如notepad,则可能会有不同的效果(比如not转载 2015-04-02 13:40:39 · 3058 阅读 · 0 评论 -
va_list/va_start/va_arg/va_end深入分析
va_list/va_start/va_arg/va_end这几个宏,都是用于函数的可变参数的。我们来看看在vs2008中,它们是怎么定义的: 1: ///stdarg.h 2: #define va_start _crt_va_start 3: #define va_arg _crt_va_arg 4: #define va_end _crt_转载 2015-03-03 12:18:09 · 529 阅读 · 0 评论 -
动态链接库和静态链接库
动态链接库dll,静态链接库lib, 导入库lib目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。 静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静转载 2015-05-04 11:21:59 · 457 阅读 · 0 评论 -
C Runtime Library
msvcrt.dll (名称:Microsoft C Runtime Library)提供了printf,malloc,strcpy等C语言库函数,并且为使用C/C++(Vc)编绎的程序提供了初始化(如获取命令行参数)以及退出等功能. C Runtime Library 的来历, API, STL, MFC, ATL关系 刚接触Windows开发时,为了快速入门查了不转载 2015-05-04 11:12:30 · 439 阅读 · 0 评论 -
.h头文件 .lib动态链接库文件 .dll 动态链接库
dllarchiveimport(1).h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。附加依赖项的是.lib 不是.dll 若生成了DLL ,则肯定也生成 LIB文件 如果要完成源代码的编译和链接,有头文件和lib就够了。如果也使动态连接的程序运行起来,有dll就够了。在开发和调试阶段,当然最好都有。.h .lib .dll三者转载 2015-05-04 10:36:36 · 536 阅读 · 0 评论 -
.h头文件 .lib库文件 .dll动态库文件之间的关系
c++mfc头文件库文件动态库目录(?)[+].h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件。如果要完成源代码的编译和链接,有头文件和lib就够了。如果也使动态连接的程序运行起来,有dll就够了。在开发和调试阶段,当然最好都有。.h .lib .d转载 2015-05-04 11:18:56 · 1719 阅读 · 0 评论 -
linux下动态链接库(.so)的显式调用和隐式调用
进入主题前,先看看两点预备知识。一、显式调用和隐式调用的区别 我们知道,动态库相比静态库的区别是:静态库是编译时就加载到可执行文件中的,而动态库是在程序运行时完成加载的,所以使用动态库的程序的体积要比使用静态库程序的体积小,并且使用动态库的程序在运行时必须依赖所使用的动态库文件(.so文件),而使用静态库的程序一旦编译好,就不再需要依赖的静态库文件了(.a文件)。转载 2015-05-13 11:20:39 · 1789 阅读 · 0 评论 -
第一个DLL程序:动态链接库DLL教程,30分钟快速上手
DLL 程序的入口函数是 DllMain(),就像 DOS 程序的入口函数是 main()、Win32 程序的入口函数是 WinMain() 一样。前面我们一直在讲的就是DOS程序。DllMain() 函数的原型为: BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVO转载 2015-05-13 12:18:18 · 855 阅读 · 0 评论 -
cout 格式化输出
将 cout 的 flag 保存到变量, 以便修改后的恢复 ostream::fmtflags old = cout.flag() ; // 无参将返回当前 flag 值 cout.flag(old) ; // 恢复到原先保存的值将 bool 值以 literals 输出cout "nu转载 2015-05-05 12:34:10 · 376 阅读 · 0 评论 -
动态链接库dll,静态链接库lib, 导入库lib
目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。 静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静态库,如果其中有错,它会准确的找到是哪个obj有错,即静态l转载 2015-05-13 11:21:36 · 505 阅读 · 0 评论 -
if(a);if(!a);if(a!=0);if(a==0)有什么区别?
if(a);如果a为真就继续,这里的真包括非0数字和非0字符,if(!a);就是如果a为假就继续,这个和最后一个等价if(a!=0);这个就是如果a不等于0if(a==0) 如果a等于0来源:http://zhidao.baidu.com/link?url=4Ln-R3K92BVcU9Fm0IfYMMapfkUwLNAp_LaLHDASg转载 2015-04-21 11:37:16 · 6000 阅读 · 1 评论 -
请问dll中的隐式链接和显式链接的区别?谢谢,初学VC,多多帮助,在线等
1、静态调用方式:由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码(如还有其它程序使用该DLL,则Windows对DLL的应用记录减1,直到所有相关程序都结束对该DLL的使用时才释放它),简单实用,但不够灵活,只能满足一般要求。 隐式的调用:需要把产生动态连接库时产生的.LIB文件加入到应用程序的工程中,想使用DLL中的函数时,只须说明一下。隐式调用不需要调用LoadLibrary()转载 2015-05-13 12:14:19 · 1929 阅读 · 0 评论 -
动态链接库的显示加载和隐式加载的区别
使用动态DLL有两种方法,一种是隐式链接,一种是显式链接,如果用loadlibrary就是显示链接,用lib就属于隐式链接。两种方法对于你的程序调用动态库时没有任何区别,只是你在编程时,步骤是不一样的。显式调用麻烦了点,但可以没有相应的lib库;隐式调用,使用起来比较简单,有函数的声明就可以了,但必须有lib库。隐式加载默认是加载到内存中的,始终占用内存。显示加载,你加载时占用内存,释放了就不占用转载 2015-05-13 12:17:13 · 649 阅读 · 0 评论 -
动态链接库DLL的加载:隐式加载(载入时加载)和显式加载(运行时加载)
静态链接库在链接时,编译器会将 .obj 文件和 .LIB 文件组织成一个 .exe 文件,程序运行时,将全部数据加载到内存。如果程序体积较大,功能较为复杂,那么加载到内存中的时间就会比较长,最直接的一个例子就是双击打开一个软件,要很久才能看到界面。这是静态链接库的一个弊端。动态链接库有两种加载方式:隐式加载和显示加载。隐式加载又叫载入时加载,指在主程序载入内存时搜索D转载 2015-05-13 10:23:22 · 6182 阅读 · 0 评论 -
C语言union(联合体 共用体)
一直以来,union都是个很少用到的东西,对于这些不常用的结构往往记不住。这次看书又看到了,还是学习一下吧。一般在Windows API的一些数据结构中才能看到这个union,其实并不复杂。本质上来说和结构体是一样的,但是从包装的角度来看有差异。union中可以定义多个成员,union的大小由最大的成员的大小决定(是其整数倍,和struct相同)。union成员共享同一块大小的内存转载 2015-05-15 10:26:13 · 586 阅读 · 0 评论 -
malloc()与 alloc()区别 (转)
malloc()与 alloc()C语言跟内存分配方式(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存转载 2015-05-15 10:37:54 · 400 阅读 · 0 评论 -
struct和typedef struct彻底明白了
struct和typedef struct分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student s转载 2015-05-14 22:24:25 · 479 阅读 · 0 评论 -
变量声明和定义的区别
我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益)变量的声明有两种情况:1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。2、另一种是不需要建立存储空间的。 例如:extern int a 其中变量a是在别的文件中定义转载 2015-05-14 22:27:27 · 404 阅读 · 0 评论 -
数据段和只读数据段
3.3.2 数据段和只读数据段.data段保存的是那些已经初始化了的全局静态变量和局部静态变量。前面的SimpleSection.c代码里面一共有两个这样的变量,分别是global_init_varabal与static_var。这两个变量每个4个字节,一共刚好8个字节,所以".data"这个段的大小为8个字节。SimpleSection.c里面我们在调用"printf"的时候,转载 2015-06-18 20:54:31 · 5413 阅读 · 0 评论 -
C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。 堆,就是那些由 new 分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个 new 就要对应一个 delete。如果程序员没有释转载 2015-06-18 22:22:20 · 475 阅读 · 0 评论 -
关于const char*和char*、const char** 和char** 赋值问题
根据ANSI C标准的赋值约束条件: 1. 两个操作数都是指向有限定符或无限定符的相容类型的指针。 2. 左边指针所指向的类型必须具有右边指针所指向类型的全部限定符。一、const char*和char* const char*的类型是:“指向一个具有const限定符的char类型的指针”。(不能修改其值) char*的类型是:“指向一个char类型的指转载 2015-06-18 13:11:43 · 4282 阅读 · 0 评论 -
全局/静态变量初始化为0放在bss段还是data段
2013-6-4上午去面试,被鄙视了,技术公司大牛的风范,好犀利!不过我这题应该是蒙对了。。 如:static unsigned char s_test = 0;这个静态变量是放到bss段还是data段呢,以下是我编译的结果:(全局变量也是如此) 1.看这样子,即使是初始化了,但是初始化的是0,还是放在bss段的2.这里还有一个问题,即使是全转载 2015-06-18 20:46:42 · 13751 阅读 · 1 评论 -
内存的静态分配和动态分配的区别
内存的静态分配和动态分配的区别主要是两个: 一是时间不同。静态分配发生在程序编译和连接的时候。动态分配则发生在程序调入和执行的时候。 二是空间不同。堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由函数alloca进行分配。不过栈的动态分配和堆不同,他的动态分配是由编译器进行释放,无需转载 2015-06-18 22:27:45 · 937 阅读 · 0 评论 -
【动态分配栈内存】之alloca内幕
哎,下班回家就开始大扫除,一直到凌晨才搞定,真的累了。但是计划的是今天必须将本文写完,不写完睡不着觉。那就尽快切入正题吧! 我们经常使用malloc或者new等函数或操作符来动态分配内存,这里的内存说的是堆内存,并且需要程序员手工释放分配的内存。malloc对应free,new对应delete。至于你要混着用,也不是不可以,只要确保逻辑和功能的正确性,还要在规范的限制范围内。转载 2015-06-18 22:29:04 · 915 阅读 · 0 评论 -
Linux中的段管理,bss段,data段
Linux 的段管理,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。该段用于存储未初始化的全局变量或者是默认初始化为0的全局变量,data段 该段用于存储初始化的全局变量,初始化为0的全局变量出于编译优化的策略还是被保存在BSS段,数据段也转载 2015-06-18 20:59:35 · 1134 阅读 · 0 评论 -
文本文件与二进制文件区别
一、文本文件与二进制文件的定义 大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码。 从上面转载 2015-05-26 13:51:45 · 483 阅读 · 0 评论 -
令人蛋疼的错误提示 0xcdcdcdcd ,0xdddddddd ,0xfeeefeee ,0xcccccccc ,0xabababab
在写C++程序的时候,老实0xcdcdcdcd ,0xdddddddd ,0xfeeefeee ,0xcccccccc ,0xabababab这种提示,不知何解,google之,错误是这样产生* 0xABABABAB : Used by Microsoft's HeapAlloc() to mark "no man's land" guard bytes after allocated h转载 2015-04-22 15:17:52 · 1784 阅读 · 0 评论 -
宏的副作用和do{}while(0)的说明
来源:http://wenku.baidu.com/link?url=-vpjW5-L5AhYC60PBUteUgoVTtZsLgnGDVeh9pAVLu4PQK4Y4rucfzyVzwDmDHRTzXL3uRqz3RoK-WoYgCRmjUEmPkKkNkk-EjKGaiQ3hTy(自己做了一些修改)本文如下: 问题:写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个,转载 2015-03-03 10:50:50 · 642 阅读 · 0 评论 -
overload和override
“覆写”和“重写”是一样的,还有叫“覆盖”的,都是override,意思就是父类和子类中的同名同参数的方法,它们之间的关系就是,子类的方法把父类的方法给盖住了(其实不一定是父类,父接口也可以)。比如动物是父类,人是子类,都有奔跑run()这个方法,人类能够不用四肢在地上奔跑,所以应该重写run()这个方法,让人类直立行走啊!注意要和另一种区分的就是“重载”,即overload,这是转载 2015-03-04 10:43:43 · 506 阅读 · 0 评论 -
malloc内存分配与free内存释放的原理
前段时间一直想看malloc的原理,在搜了好几篇malloc源码后遂放弃,晦涩难懂。 后来室友买了本深入理解计算机系统的书,原来上面有讲malloc的原理,遂看了,先明白理论,在看代码就理解比较快了= = 1.问题的引入: 为什么要使用malloc,主要是因为在代码中,为了节约内存,很多数据都是动态生成的,所以会用malloc,对应于C++中的new,底层还是调用m转载 2015-03-09 21:43:22 · 2269 阅读 · 0 评论 -
linux驱动中的ENODEV
ENODEV 应该是默认尚未分配到具体设备的意思。如果程序有一个打开的设备句柄,在当前结构里,我们只要把它赋值为空,就像它已经消失了。对于每一次设备读写等其它函数操作,我们都要检查结构是否存在。如果不存在,就表明设备已经消失,并返回一个-ENODEV错误给用户程序。来源:http://zhidao.baidu.com/link?u转载 2015-03-28 19:29:13 · 6050 阅读 · 0 评论 -
EOF说明
C语言标准库中的EOF 是宏常数,其定义是:#define EOF (-1)程序中凡写EOF处,将用 (-1) 替代,替代后再编译。while((c=getchar())!=EOF) 就是 while((c=getchar())!=(-1))------当读语句(例如 fscanf) ,读到文件尾时,就会获得EOF,EOF又叫文件结束符。读语句(例如getcha转载 2015-03-30 14:02:09 · 905 阅读 · 0 评论 -
回车和换行
换行符‘\n’和回车符‘\r’顾名思义,换行符就是另起一行,回车符就是回到一行的开头,所以我们平时编写文件的回车符应该确切来说叫做回车换行符 '\n' 10 换行(newline)'\r' 13 回车(return)也可以表示为'\x0a'和'\x0d'.(16进制)在windows系统下,回车换行符号是"\r\n".但是在Linux等系统下是没有"\r"转载 2015-03-30 14:49:59 · 409 阅读 · 0 评论 -
scanf输入字符串问题
1、#include"stdio.h"#include"iostream"using namespace std;int main(){ char a[4]={'l','o','v','\0'}; printf("%s",a); system("PAUSE"); return 0;}原创 2015-03-14 18:56:30 · 5268 阅读 · 0 评论
分享