C/C++
Asome
不要害怕犯错,快速试错也是学习的一种捷径
展开
-
为什么.h文件中不能定义全局变量
原因: 存在多次创建变量.如果头文件中可以定义全局变量,那么每个包含该头文件的文件里都会有该全局变量的定义.因为C语言的include是直接将文件嵌入到include这个地方的. 解决办法: 在头文件使用 extern 来声明该全局变量,然后再任意一个cpp文件中定义该变量.全局变量是存放在静态区的.会被默认初始化为0.原创 2015-11-11 02:58:54 · 10628 阅读 · 5 评论 -
如何加快C++代码的编译速度
C++代码一直以其运行时的高性能高调面对世人, 但是说起编译速度,却只有低调的份了。比如我现在工作的源代码,哪怕使用Incredibuild调动近百台机子,一个完整的build也需要四个小时,恐怖!!!虽然平时开发一般不需要在本地做完整的build,但编译几个相关的工程就够你等上好一段时间的了(老外管这个叫monkey around,相当形象)。想想若干年在一台单核2.8GHZ上工作时的场景 -转载 2015-05-27 15:59:46 · 817 阅读 · 0 评论 -
静态链接库lib, 动态链接库dll,导入库lib的区别
动态链接库有两种两用方式,分别是动态调用.dll和静态调用导入库.lib,那么动态链接库的静态调用方式与静态链接库调用有什么区别?带着这个问题,查找到以下资料。(问题的答案已用褐色标出)(下述资料来源)一、动态链接库的概念 动态链接库(Dynamic Link Library,缩写为DLL)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。动态链接库转载 2015-04-06 18:16:13 · 1037 阅读 · 0 评论 -
C++编程学习52个经典网站 强力推荐
C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建议,以进一步加强这方面的清单。1、http://snippets.dzone.com/tag/c/ --数以千计的有用的C语言源代码片段2、http://转载 2015-03-17 09:55:22 · 1469 阅读 · 0 评论 -
C++预编译头文件简介
许多初学 VC 的朋友也许都为那么一个问题困扰过: 为什么所有的 cpp 都必须 #include "stdafx.h" 也许请教了别的高手之后,他们会告诉你,这是预编译头,必须包含。可是,这到底是为什么呢?预编译头有什么用呢? 这得从头文件的编译原理讲起。其实头文件并不神秘,它的全部作用,就是把自己的所有内容直接“粘贴”到相应的 #include转载 2014-12-30 09:25:10 · 708 阅读 · 0 评论 -
C++中枚举的用法
1、枚举enum的用途浅例 写程序时,我们常常需要为某个对象关联一组可选alternative属性.例如,学生的成绩分A,B,C,D等,天气分sunny, cloudy, rainy等等。 更常见的,打开一个文件可能有三种状态:input, output和append. 典型做法是,对应定义3个常数,即: const int input = 1;转载 2014-12-28 11:50:18 · 1393 阅读 · 0 评论 -
Vs 2008 解决方案的目录结构设置和管理
解决方案与项目:从VC6之后VC系列就使用解决方案(Solution)来替代原来的工作空间,用于组织和管理多个相关的项目(Project)。文章首先演示一个虚拟的解决方案和我们期望得到的目录结构,然后使用VC2008的项目设置功能来一步一步达到我们的需求。虚拟解决方案:该虚拟解决方案名为GMA,包含一个动态链接库项目ChocolateMilk和一个应用程序项目Pur转载 2014-12-27 14:38:39 · 652 阅读 · 0 评论 -
C++中使用Lua脚本 和lua中调用c的方法
转:http://www.cnweblog.com/fly2700/archive/2010/02/09/282920.html参考http://blog.csdn.net/kun1234567/archive/2007/12/11/1929815.aspx第1步:下载从官方主页www.lua.org下载Lua源代码,最新版本为5.1.3。(jack-wang注:现在已经是5.1.转载 2013-08-06 00:26:10 · 1584 阅读 · 0 评论 -
c/c++ 宏函数的应用
声明: 以下涉及到的概念和理解,仅仅是建立在概念学习和实践后的理解。所以如果有概念上的错误,请拍砖,再下非常感谢!宏的使用在c/c++语言中的运用由于其的预处理时期的替换特性被广泛的应用。虽然宏在c++项目中的使用并不被提倡,甚至是被抑制的。但是却不能否认它在实际开发中的便利性。之所宏不被提倡使用,是由于其不会是在预处理阶段中进行的,且并不没有类型检查、正确性验证等等操作。原创 2015-12-13 18:51:52 · 1785 阅读 · 0 评论 -
C++对lua静态库的使用
lua静态库的使用问题原创 2016-03-06 18:32:05 · 2436 阅读 · 0 评论 -
开源C++项目Google JavaScript引擎V8挑战实录,带你进入V8之旅
--写在开始按照今年的计划,需要研究一个有使用价值的linux下的C++开源项目,无意中发现了V8,觉得还不错,于是记录下来,希望对大家有所帮助。V8是一个由丹麦Google开发的开源JavaScript引擎,用于Google Chrome中,Chrome是现有的浏览器中速度相对比较快的一个,这完全得益于V8的效率,另外,作为一个独立的项目,V8也可以嵌入到我们自己开发的项目中运行,查转载 2016-03-10 19:36:50 · 1260 阅读 · 0 评论 -
堆栈被破坏的几种情况
简要说明:程序的栈内存空间是向下增长的,堆内存向上增长。局部变量赋值越界例如: 局部字符串数组拷贝字符串,当拷贝的字符串大大的超过变量空间就会破坏堆栈char buff[4] = {0, }; strcpy(buff, "Hello,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,");指向局部变量的指针越界修改数据例如:void test...原创 2019-03-05 14:01:27 · 11894 阅读 · 4 评论 -
记一次C++堆对象使用错误
不要将string对象的c_str()作为参数使用, 因为当string释放后,c_str()返回值失效,且不一定会出问题。 当堆内存移动时,将会导致c_str()引用的时候出现bug,甚至是宕机。。。 记: 切忌将string的c_str()返回值当做 const char* 来使用...原创 2019-02-25 13:51:31 · 217 阅读 · 0 评论 -
Linux环境下段错误的产生原因及调试方法小结
最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决。1. 段错误是什么一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,...转载 2018-10-24 14:07:25 · 1605 阅读 · 0 评论 -
c/c++ 时间函数 localtime 坑
localtime() 函数返回的数据 struct tm* 内存空间由其自己管理。 且连续调用时,第二次的调用会修改第一次的数据。 返回的时间为本地时区时间原创 2017-10-30 14:42:11 · 4021 阅读 · 0 评论 -
google-v8编译
说明:v8 third_party 和depot_tools svn root目录: https://src.chromium.org/svn/trunk/tools/如果在编译过程中有什么问题,也可以给我消息,我会尽快回复,如发现错误,也请指正。欢迎共同学习!QQ312919010 注意:生成VS工程时,需要使用python2.7。但编译时,third_party下一定...原创 2016-04-26 14:08:14 · 1788 阅读 · 0 评论 -
c++类的隐式转换与强制转换重载详解
c++类的隐式转换与强制转换重载详解在写这篇文章之前,让我们先回顾一下编译器通过匹配过程确定调用哪一个函数的匹配顺序:(1)寻找和使用最符合函数名和参数类型(包括返回值)的函数,若找到则调用;(2)否则,寻找一个函数模板,将其实例化产生一个匹配的重载函数,若找到则调用;(3)否则,寻找可以通过类型转换进行参数匹配的重载函数,若找到则调用它。如果以上步骤均未找转载 2016-02-29 17:54:58 · 3549 阅读 · 1 评论 -
C++ 学习之函数重载、基于const的重载
函数重载函数重载的定义是:在相同的作用域中,如果函数具有相同名字而仅仅是形参表不同,此时成为函数重载。注意函数重载不能基于不同的返回值类型进行重载。注意函数重载中的“形参表”不同,是指本质不同,不要被一些表象迷惑。main函数不能被重载。下面三组定义本质是相同的,不是重载:1)int sum (int &a); 和 int sum (int &);2) i转载 2014-07-27 12:23:22 · 817 阅读 · 0 评论 -
我的命名规范
C++命名: [m_|s_|g_] type[class name|struct]long long lllong lint nshort ibyte byunsigned int iu类型缩写+类型unsigned char ichunsigned shortiuunsigned long luWORD wDWORD d原创 2014-03-21 22:53:17 · 989 阅读 · 0 评论 -
C++ 虚函数和纯虚函数总结
一 定义虚函数: 通过虚函数基类可以使用派生类的虚函数方法. C++多态的一种.纯虚函数: 功能同上,只是没有函数实现.二 总结虚函数: 如果基类中声明了有虚函数,则该类的对象以及该类派生类的对象都会有一个虚函数表,并且虚函数表位于对象所在内存的最前面.纯虚函数: 当虚函数为类的析构函数时, 纯虚函数也必须要实现. 因为析构函数最终是要调用的. 在分析虚函数时,必须要结合原创 2014-03-09 23:08:17 · 805 阅读 · 0 评论 -
C++ 虚函数表解析
C++ 虚函数表解析 陈皓http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,R转载 2013-07-31 09:07:33 · 681 阅读 · 0 评论 -
c 和 c++ 中的 函数void形参和空形参的区别
在C语言中:空形参并不代码参数,void 才表示没有参数。 而在C++中,这两种是一样的含义,没有参数int function();//int function(void)//这样声明,在后面的使用会报错int main(){function(3);return 0;}int function(int i){pirntf("haha, i'm int f原创 2013-07-24 14:05:59 · 7010 阅读 · 0 评论 -
C++ 用new 动态创建多维数组
我们知道char *a=new char[10];可以创建一个长度为10的数组。当把定值10换为一个变量时,我们的程序也没有任何问题,这时可成了名副其实的动态创建数组,如:int n=10;char *a=new char[n];但我们怎么动态创建一个多维数组呢?一定有人写出来这样的代码://错误代码char **a=new char[10]转载 2013-07-30 12:04:25 · 1327 阅读 · 0 评论 -
C++中extern “C”含义深层探索
C++中extern “C”含义深层探索 1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,转载 2013-07-29 16:40:22 · 751 阅读 · 0 评论 -
C++中四种类型转换符的总结
一、reinterpret_cast用法:reinpreter_cast (expression) reinterpret_cast操作符修改了操作数类型,但仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换,即二进制值没有变。例如:int n=9; double d= reinterpret_castdouble > (n); 在进行计算以后, d 包含无用值转载 2013-07-30 10:51:14 · 825 阅读 · 0 评论 -
C++技巧之名字空间namespace
C的开发人员会经常使用#define,即用宏来声明常量,但宏却是全局的,对大的工程很难维护,经常是导致名字冲突。还好,C++给我们带来了namespace名字空间。它的使用如下,名字空间可以把一组逻辑分组,同时名字空间也是一种作用域。[cpp] view plaincopynamespace outspname { con转载 2013-07-30 09:52:46 · 841 阅读 · 0 评论 -
c/c++混合编程--整理
一、混合编程基础C与C++混合编程C++ 是在 C 语言的基础上发展起来的。在某种程度上,我们可将 C++ 看做 C 的一种扩展。在本质上,二者的数据类型和函数调用惯例都是一致的,因此 C 与 C++ 混合编译也是很自然的事情。二者的区别仅在于编译后函数的名字不同──C 简单地使用函数名而不考虑参数的个数或类型,而 C++ 编译后的函数名则总是将参数类型列表作为其一部分。尽转载 2013-07-29 21:59:47 · 899 阅读 · 0 评论 -
用C语言实现归并排序
1. [代码][C/C++]代码 跳至 [1] [全屏预览]view sourceprint?01#include02#include03#include04#include转载 2013-07-19 01:24:28 · 1078 阅读 · 0 评论 -
#ifndef 与 #program once 的区别
#ifndef 与 #program once 的区别 为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SO转载 2013-07-24 19:27:31 · 1106 阅读 · 0 评论 -
可变长参数列表误区与陷阱——va_arg不可接受的类型
可变长参数列表误区与陷阱——va_arg不可接受的类型实现一个有可变长参数列表函数的时候,会使用到stdarg.h(这里不讨论varargs.h)中提供的宏。例如,我们要实现一个简易的my_printf:1. 它只返回void, 不记录输出的字符数目2. 它只接受"%d"按整数输出、"%c"按字符输出、"%%"输出'%'本身如下: 1 #include stdarg转载 2013-07-25 11:41:37 · 2100 阅读 · 0 评论 -
数组作形参时
一、数组作参数后的长度数组作参数时,其后面的长度毫无意义,应该改成不定义长度的数组。作为参数时,数组将自己降级为指针。下面例子中,sizeof(arr)取到的是arr地址的长度,等于4。而主程序中sizeof(num)应该是12。#include int subFunc(int arr[3]);int main(void){ int x, len; num[转载 2013-07-26 14:14:01 · 1461 阅读 · 0 评论 -
Linux内核中的hash和bucket
Linux内核中的hash和bucket 哈希表(Hashtable)又称为“散置”,Hashtable是会根据索引键的哈希程序代码组织成的索引键(Key)和值(Value)配对的集合。Hashtable 对象是由包含集合中元素的哈希桶(Bucket)所组成的。而Bucket是Hashtable内元素的虚拟子群组,可以让大部分集合中的搜寻和获取工作更容易、更快速。 w转载 2013-11-18 00:03:36 · 1795 阅读 · 0 评论 -
visual stdio 项目文件解释
在VS调试过程中,编辑器会按照配置环境自动的生成相应的文件,用来保存项目的配置信息。其中包括了项目的组织方式、项目的当前状态、项目的调试信息等等。而这些信息都是保存在相应格式的文件中。下面简单的列举了一些常见的配置文件,及其作用。我是新手,所以难么有错误,希望发现错误的同学,能够给予纠正,本人不胜感激。1、解决方案文件: 后缀名sln, 这个是项目的工程文件,是记录多个项目的文件,一原创 2013-10-19 11:55:03 · 1485 阅读 · 0 评论 -
游戏开发中常用的设计模式
使用设计模式来提高程序库的重复利用性是大型程序项目开发必须的。但是在“四人帮”的设计模式概述中提到了23种标准设计模式,不但难以记住,而且有些设计模式更多的适用于应用程序开发,对游戏项目引擎设计并没有很多的利用价值。根据经验,精挑细选后,笃志在这里记录一些自认为有利用价值的设计模式,以便之后自己设计时使用。 一:观察者Observer 观察者的设计意图和作用是:它将对象与对象之转载 2013-10-03 18:35:13 · 1040 阅读 · 0 评论 -
STDIN_FILENO的作用及与stdin 的区别
STDIN_FILENO的作用及与stdin 的区别 原文地址http://blog.csdn.net/yeyuangen/article/details/6781999 1.STDIN_FILENO的作用 STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。转载 2013-08-17 17:15:08 · 1013 阅读 · 0 评论 -
c/c++必须学会的开源库
作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应用过, 但是回过头仔细想想,其实以前自己写过的这些代码,只能是在特定的项目或者特定的环境中使用, 对于自己来说, 在不同的项目中应用, 只需要复制代码, 改改也就可以了, 因为自己写的代码自己很熟悉。转载 2013-08-25 21:04:14 · 1257 阅读 · 0 评论 -
vs2012远程调试功能的改进
vs2012远程调试功能的改进不知道大家有没有遇到过这种情况,刚开发完的程序,明明在本机能够好好的运行,可是部署到服务器过分发给用户时,总是出现莫名其妙的错误。一时半会又看不出问题来,怎么办呢?难道只能在服务器或是客户电脑上装一个vs、跟一下代码吗?其实不用的,vs有一个远程调试的功能。这个功能是这样的,程序在其他的电脑上运行,但是我们可以在本地电脑上进行断点跟踪。下面转载 2013-08-25 19:48:49 · 922 阅读 · 0 评论 -
scanf 的总结
scanf 的丑陋下面的是我自己在学习当中总结的一些经验,在这里和大家交流一下,如果有错误的,麻烦大家帮忙改正。联系方式:QQ:2191161567 1. 不能读入任何空白字符(空格,制表符,回车等等)2. 返回时,不丢弃遗留的结束符(回车),gets就没有3. 读取数据时非常严格,不安全。例如读取数字的时候,我们需要使用%i 才可以 读取八进制/16进制的数字。4.原创 2013-07-25 09:56:33 · 942 阅读 · 0 评论 -
c++服务器编程面试总结
1. c++面向对象的三大特性,并给出解释。2. 指针和引用区别3. const 和 define 的区别4. extern 'C' 5. C++中多态性的体现6. 什么是虚函数7.重载、覆盖(重写)和隐藏三者区别8.容器,map的结构9.类名、成员变量名、函数名、局部变量、全局变量的命名规则10. strcat 函数为什么要返回char11. strlle原创 2013-07-26 23:06:15 · 1367 阅读 · 0 评论 -
C++中const用法总结
作者JuKevin1. const修饰普通变量和指针const修饰变量,一般有两种写法:const TYPE value;TYPE const value;这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value只不可变。例如:const int nValu转载 2013-07-17 18:18:34 · 658 阅读 · 0 评论