c/c++ programming
redline2005
这个作者很懒,什么都没留下…
展开
-
全局变量和静态变量的初始化问题
1. 全局变量和静态变量存储区域和作用范围的区别相同点:存储在静态数据区;不同点:作用范围不同,静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,全局变量作用范围全局可见 2. 全局变量的初始化问题全局变量的初始化必须为一个常量,不能是一个非常量的表达式;而在c++中是可以的。并且c、c++全局变量的赋值要在函数内部进行!int a;a原创 2013-12-09 15:36:50 · 3100 阅读 · 0 评论 -
C语言中,头文件和源文件的关系(转)
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 (.obj文件)4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用ob转载 2013-12-10 17:15:26 · 813 阅读 · 0 评论 -
extern "C" 详解
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般之包括函数名。 这个功能十分有用处转载 2013-12-09 15:06:06 · 643 阅读 · 0 评论 -
c/c++中static 关键字
静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值。 静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见。用法1:函数内部声明的static变量,可作为对象间的一种通信机制 如果一局部变量被声明为static,那么将只有唯一的一个静态分配的对象,它被用于在该函数的所有调用中表示这个变量。这个对象将只在转载 2013-12-08 20:49:53 · 587 阅读 · 0 评论 -
c语言中的inline函数
<br />在c++中,为了解决一些频繁调用的小涵数大量消耗栈空间或是叫栈内存的问题,特别的引入了inline修饰符,表示为内联涵数。 <br /><br />可能说到这里,非常多人还不明白什么是栈空间,其实栈空间就是指放置程式的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,如果频繁大量的使用就会造成因栈空间不足所造成的程式出错的问题,涵数的死循环递归调用的最终结果就是导致栈内存空间枯竭。 <br /><br />下面我们来看一个例子 <br /><br />#include <iostre原创 2011-04-09 15:54:00 · 3295 阅读 · 0 评论 -
C/C++头文件及使用
#include //设定插入点#include //字符处理#include //定义错误码#include //浮点数处理#include //文件输入/输出#include //参数化输入/输出#include //数据流输入/输出#include //定义各种数据类型最值常量#include //定义本地化函数#include //定义数学函数#include转载 2010-09-03 15:47:00 · 852 阅读 · 0 评论 -
C 语言中的一维数组与指针
数组和指针都属于数据类型,分别是这么定义的: int array[3]; int * point;array 代表一段连续的内存,里面有3个元素,每个元素是int型的point是一个指针,在32位平台上,大小为4字节,里面存储着一个内存地址。看起来这俩哥们没啥联系吗,我们来sizeof一下,这个大家都知道,sizeof(point)的值转载 2014-04-14 09:18:29 · 776 阅读 · 0 评论 -
cuda 1.x 编译器产生的奇怪问题及解决方法
cuda项目中编译问题:错误提示: 内存访问越界导致启动核函数失败的问题。nsight调试:nsight -> Enable CUDA memory checker,然后 nsight -> Start CUDA Debugging,开始调试,不设置断点,vs直接指向访存越界的语句;即, unsigned char *p= shared_data + i; //shared_data 为共享内存中的数组大小为:3*width uchar2 gt=*(ucha原创 2014-04-17 09:52:50 · 1223 阅读 · 0 评论 -
有关Libssh2的Win32程序开发中遇到的若干问题的汇总 .
有关Libssh2的Win32程序开发中遇到的若干问题的汇总 前不就,在工作中编写了一个应用libssh2开源库的win32控制台应用程序,libssh2是一个开源的c/c++的ssh2协议库,应用libssh2协议库可以很容易的编写出一个通过ssh2协议连接远程主机的client程序。但是在开发的过程中遇到了很多的问题,使我走了很多的弯路。现在总结一下,对别人也是个启转载 2014-05-04 10:00:32 · 3491 阅读 · 2 评论 -
搭建ssh2协议的开发环境:openssl+libssh2库+Visual Studio 2008 .
SSH2是一套安全通讯协议框架(早期的SSH1由于存在安全漏洞,现在已经不用了),基于SSH2协议的产品目前主要有openssh(http://www.openssh.org/ ),putty(http://www.putty.org/ ),SSH Secure Shell Client(从http://www.moodisk.com/zh_CN/index.html?src=download.p转载 2014-05-04 10:01:52 · 2617 阅读 · 0 评论 -
2011阿里巴巴集团实习生招聘笔试题 C&C++ .
公共题选择题(每题5分)1. 若一棵二叉树具有10个度为2的结点,则该二叉树的度为0的结点个数是( )A:9 B:11 C:12 D:不确定 2.下列排序算法中,其时间复杂度和记录的初始排列无关的是( )A:插入排序 (预先排序,运行时间为O(N)) B:堆排序 C:快速排序 (最坏情形O(N2)) D:冒泡排序转载 2014-04-19 18:51:55 · 1635 阅读 · 0 评论 -
cuda优化-展开循环
最近看到了一些循环展开优化程序性能的知识,总结一下。循环展开,即 #pragma unroll N(N为要展开的数值)。一般来说,循环展开主要是为了减少CUDA运行的分支冲突,由于GPU中SM架构的特殊性以及WARP(Half-warp)执行的严格并行性,使得循环语句有着交的的分支冲突,通过循环展开,可以有效的降价分支冲突。如:就是完全循环展开后的形式,但是也可以不完全循环展开,只展开循环转载 2014-04-08 09:11:44 · 7539 阅读 · 0 评论 -
cuda执行配置对性能的影响
执行配置和占用率 使用>>语法指定执行线程配置的时候,grid 和block大小也影响程序的效率。一般而言,grid要大于多处理器的数目,这样才能让多处理器不至于空闲,但是这样也会导致一些问题,比如负载均衡,如果grid大小不能比sm 数目整除的话,就会有SM计算的时候,另外一些SM空闲,如果grid远大于sm数目的话,可忽略,但是如果SM数目与grid大小相差不大的话,性能损耗原创 2014-04-12 20:08:13 · 1582 阅读 · 0 评论 -
cuda低占用率下性能优化
为提升GPU的效率,常用的方法是提升设备占用率(occupancy),包括在每个流处理器上运行更多的线程和为每个线程块设定更多的线程。人们常常认为这是隐藏延迟的唯一方法,但实验结果证明最大化占用率反而可能会降低性能。Vasily Volkov牛人的ppt,对如何更有效的使用GPU做通用计算提出了增加线程级并行以外的另一种方法---增加指令级并行,看后受益匪浅。转载 2014-04-12 11:38:18 · 11067 阅读 · 0 评论 -
多字节数据在内存(或显存)和寄存器上存放顺序
多字节数据在内存、显存(N卡)和寄存器(N卡)上的存放顺序。 char4 dog;dog.x ... 第1个字节 dog.y .... 第2个字节 dog.z ..... 第3个字节 doz.w ...... 第4个字节 ?原创 2014-04-11 23:07:20 · 4265 阅读 · 0 评论 -
vs中使用第三方库
<br />工具-》选项-》项目解决方案-》VC++目录,添加第三方库的include文件件,lib文件夹。原创 2010-09-03 09:38:00 · 985 阅读 · 0 评论 -
VS2005 C++ 项目怎样添加“依赖”、“库目录”和“包含目录”
1. 添加编译所需要(依赖)的 lib 文件 [解决方案资源管理器]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多个 lib 以空格隔开。 (等同于“#pragma comment(lib, “winsock.lib”) ”语句) 2. 添加库(Libs)文件目录方法 1:[解决方案资源管理器]“项目->属性->配置属性->连接器->常规->附加库目录” 方法 2:[菜单]“工具->选项->项目和解决方案->C++ 目录”,选择对应平台,然后添加转载 2010-09-03 11:19:00 · 1104 阅读 · 0 评论 -
c++ 模板
<br />C++ 模板基础<br /><br />1. 什么是模板<br />模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。<br />我们知道,C++ 是一种“强类型”的语言,也就是说一个变量,编译器必须确切的知道它的类型,而模板就是构建在这个强类型语言基础上的泛型系统。<br /><br />2. 模板的语法<br />模板函数<br />template< typename {类型参数名称}, [ int {Name}=...]原创 2011-04-09 14:10:00 · 722 阅读 · 0 评论 -
vs2010修改项目名称
我们常常在建立项目的时候就必须输入一个项目名称,有的时候我们就随意的起了一个名称,可是到后面想到了一个更好的项目名我们就想把项目名称改过来,但VS并不那么智能,我们不能简单的将项目对应的解决方案SLN文件名改过来,或是将csproj的名称改过来就行。我就曾这么天真的这么做过,后果很严重。下面我将我觉得正确的步骤写下出来,希望对与我有同样需求的童鞋有帮助:1.在VS2010“解决方案资源转载 2013-12-08 10:31:25 · 1067 阅读 · 0 评论 -
在共享DLL中使用MFC 和在静态库中使用MFC区别 .
使用VS2008,在项目属性中有一项MFC的使用,有三种设置: 1.使用标准Windows库 2.在共享DLL中使用MFC 3.在静态库中使用MFC 第一种顾名思义。第二种指的是打包时一些MFC的DLL的内容没有被包含在EXE文件中,所以EXE文件较小,但是运行时要求系统中要有相关的DLL文件。第三种是将DLL中的相关代码写进EXE文件中,文件转载 2013-12-03 08:43:25 · 877 阅读 · 0 评论 -
C语言读取位图
位图文件是分成4部分的。第一部分是位图文件头,它包括位图文件名,位图的大小和位图数据离文件头的偏移量。接下去的是位图信息头,它包括了位图的许多信息,比如位图的宽度,高度和位图使用的颜色数。再后面是颜色表,它可能包含了2个或更多的RGBQUAD结构。最后面是位图图象的数据。一.位图结构如下: ---- 一、BMP文件结构 ---- 1. BMP文件组成 ---- BMP文转载 2013-11-29 14:52:59 · 4258 阅读 · 0 评论 -
c语言中头文件的建立与使用-函数、全局变量、全局数组
<br />一些初学C语言的人,不知道头文件(*.h文件)原来还可以自己写的。只知道调用系统库函数时,要使用#i nclude语句将某些头文件包含进去。其实,头文件跟.C文件一样,是可以自己写的。头文件是一种文本文件,使用文本编辑器将代码编写好之后,以扩展名.h保存就行了。头文件中一般放一些重复使用的代码,例如函数声明,变量声明,常数定义,宏的定义等等。当使用#i nclude语句将头文件引用时,相当于将头文件中所有内容,复制到#i nclude处。为了避免因为重复引用而导致的编译错误,头文件常具有<br转载 2011-04-09 18:41:00 · 10783 阅读 · 2 评论 -
c++动态创建二维数组的方法
c++动态创建二维数组的两种方法原创 2010-09-16 18:17:00 · 4103 阅读 · 1 评论 -
vs2005中编写纯c程序
<br />步入.net时代后,VS马上就换了个脸,对那些平时用VC做作业的人来说,立马就受到了个下马威——直接新建源代码不能编译了!看到菜单栏上一堆一堆的选项,仿佛VS2005已经不能作为纯C的IDE使用了。然而VS的功能太强大,到底能否使用VS2005/2003编写纯C程序呢?当然可以!只是步骤会麻烦一些。 <br /><br /> 首先,新建一个项目/工程: <br /><br /> 选择“Win32控制台应用程序”。有些老师建议选择空项目,但是试过之后发现如果选择空项目,调试原创 2010-09-03 09:00:00 · 2042 阅读 · 0 评论 -
对c&c++源文件和头文件分开的好处的一点认识
对c&c++程序来说,基本上来说都是要把源文件和头文件分别编写。一般都是代表一个基本功能的源文件引用相应的头文件。一个 相关功能的模块可能有若干对源文件和头文件组成。这是基于组件编程的核心。在我看来,他的好处是巨大的,是java不可比拟的,也是不可复制的:c语言中头文件中一般定义了函数的声明、结构体的定义、宏定义。(常量和全局变量最好放到源文件中)1) 从业务扩展性上看转载 2013-12-10 17:31:30 · 1118 阅读 · 0 评论 -
c语言编程中字节对齐的问题
1. 什么是对齐? 现代计算机中内存空间都是按照字节(byte)划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序地一个接一个地排放,这就是对齐。2.计算机为什么要对齐? 各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能转载 2013-11-30 23:26:30 · 3470 阅读 · 0 评论 -
为什么要使用头文件
1. 通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。 <br />2. 头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。原创 2011-04-09 17:49:00 · 1305 阅读 · 0 评论 -
函数库文件
<br />一个很简单的问题调试了好久,不过还算有收获。<br />现总结一下:<br />1. vs2008中 math.h 头文件中没有定义M_PI,如果程序确实要用M_PI则需自己定义。#define M_PI 3.14159265358979323846<br /> <br />2. 如果程序中自己定义的函数比较多,为了调试方便使用方便,可以将这些函数都放到一个文件里面,从而实现了真正的代码可重用性,这个函数文件叫做模板,模板可以分为两种:函数模板,类模板。这里遇到的是函数模板。<br原创 2011-04-09 13:28:00 · 598 阅读 · 0 评论 -
vs中使用M_PI的问题及解决
<br />M_PI 是一个宏定义,圆周率的定义<br /> C/C++ code#define M_PI 3.14159265358979323846此宏定义和编译器有关,TC中M_PI宏就定义在<math.h>里面。但vc的<math.h>中没有了M_PI的宏定义。因此编译时会出错,提示:“M_PI”: 未声明的标识符。解决方法:自己定义。原创 2010-09-03 09:55:00 · 20832 阅读 · 1 评论 -
extern "C"用法详解
1.前言:时常在cpp的代码之中看到这样的代码:#ifdef __cplusplusextern "C" {#endif//一段代码#ifdef __cplusplus}#endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码转载 2013-12-09 15:11:08 · 734 阅读 · 0 评论 -
在vs2010中,新建C语言程序,运行时DOS窗口一闪而过看不到结果,解决方法整理
在vs2010中,新建C语言程序,运行时出现这样的现象:DOS窗口一闪而过,想查看输出内容,但是看不到,很纠结!!!现整理下自己测试过的方法: 1) 在main()函数的末尾加一个 system("pause"); 此时头文件应有#include注意:主函数末尾有re转载 2013-12-05 17:06:49 · 9544 阅读 · 1 评论 -
链接错误-库冲突(libcmt.lib和libcmtd.lib)
在同一个项目中,所有的源文件必须链接相同的C运行时库。如果某一文件用了Multithreaded DLL版本,而其他文件用了Single-Threaded或者Multithreaded版本的库,也就是说用了不同的库,就会导致这个警告的出现。总之,一句话,lib之间有冲突。需要删除导入的一些libs。 版 本类 型使用的library被忽略的libraryR Release单线程libc.liblibcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcr原创 2011-04-10 16:45:00 · 20950 阅读 · 3 评论 -
c/c++ cuda 编程中volatile修饰符作用
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2016-08-05 19:54:40 · 3420 阅读 · 0 评论