C/C++
liu5320102
这个作者很懒,什么都没留下…
展开
-
嵌入式笔试
1:用C语言实现大小端的测试 IntCheckCpu() {union{int a;char b;}c;c.a=1;if(c.b==1)printf(“小端”);else printf(“大端”);}2:volatile的作用有哪些?Volatile第一变量相当于告诉编译器这个变量的值会随时发生变化,每次使用之前都要去内存里从新转载 2013-05-30 12:10:25 · 585 阅读 · 0 评论 -
C中如何调用C++函数
C中如何调用C++函数 C中如何调用C++函数? 前阵子被问及一个在C中如何调用C++函数的问题,当时简单回答是将函数用extern "C"声明,当被问及如何将类内成员函数声明时,一时语塞,后来网上查了下,网上有一翻译C++之父的文章可以作为解答,遂拿来Mark一下。 将 C++ 函数声明为``extern "C"''(在你的 C++ 代码里做这个声明),然后调用它(在你的转载 2014-02-19 19:54:45 · 485 阅读 · 0 评论 -
C++ 虚函数表解析
前言 C++关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片,没有详细的说明,没有比较,没有举一反三。不利于学习和阅读,所以这是我想写下这篇文章的原因。也希望大家多给我提意见。 了解的人都应该知道虚函数(Virtual Function。在这个表中,主是要一个类的虚转载 2014-07-31 15:19:54 · 363 阅读 · 0 评论 -
托盘冒泡消息
新建一个MFC 对话框程序添加成员变量 NOTIFYICONDATA m_tnd; 添加方法代码BOOL SetupTrayIcon(HWND hwnd){ //ZeroMemory(&m_tnd, sizeof(NOTIFYICONDATA)); m_tnd.cbSize = sizeof( NOTIFYI转载 2015-05-06 17:58:21 · 870 阅读 · 0 评论 -
nedmalloc
nedmalloc是一个跨平台的高性能多线程内存分配库,很多库都使用它,例如:OGRE.现在我们来看看nedmalloc的实现 (以WIN32部分为例) 位操作小技巧;(1)、获取最低位的出现位置的掩码;x&(-x)(2)、判断值为2的幂:x & (x-1) == 0(3)、获取从最低的值为1的位开始到左边MSB的掩码: x | (-x)(4)、字节对齐;转载 2015-06-23 14:48:55 · 502 阅读 · 0 评论 -
C语言函数之可变参数原理:va_start、va_arg及va_end
说到C语言函数可变参数,我们最先想到的可能就是printf、scanf、printk了。在Linux-2.6.24.7内核源码里,printk函数原型如下:asmlinkage int printk(const char *fmt, ...) asmlinkage表示通过堆栈传递参数。gcc编译器在汇编过程中调用c语言函数时传转载 2015-08-11 11:19:57 · 3572 阅读 · 0 评论 -
C++对象模型
今天在网上看到了一篇写得非常好的文章,是有关c++类继承内存布局的。看了之后获益良多,现在转在我自己的博客里面,作为以后复习之用。——谈VC++对象模型(美)简.格雷程化 译译者前言一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细 节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。 Inside the C++转载 2015-08-21 16:36:54 · 423 阅读 · 0 评论 -
c++对象内存模型【内存布局】
#类中的元素0. 成员变量 1. 成员函数 2. 静态成员变量 3. 静态成员函数 4. 虚函数 5. 纯虚函数#影响对象大小的因素0. 成员变量 1. 虚函数表指针(_vftptr) 2. 虚基类表指针(_vbtptr) 3. 内存对齐_vftptr、_vbtptr的初始化由对象的构造函数, 赋值运算符自动完成;对象生命转载 2015-08-21 16:36:07 · 366 阅读 · 0 评论 -
__stdcall,__cdecl,__fastcall的区别
__stdcall,__cdecl,__fastcall的区别一、三者区别一览表 __stdcall__cdecl__fastcall参数传递方式右->左 压栈右->左 压栈左边开始的两个不大于4字节(DWORD)的参数分别放在ECX和EDX寄存器,其余的参数仍旧自右向左压栈传送转载 2016-02-29 11:14:49 · 304 阅读 · 0 评论 -
线程间的通信、同步方式与进程间通信方式
线程间的通信、同步方式与进程间通信方式字数1771 阅读3355 评论0 喜欢61、线程间的通信方式使用全局变量主要由于多个线程可能更改全局变量,因此全局变量最好声明为violate使用消息实现通信在Windows程序设计中,每一个线程都可以拥有自己的消息队列(UI线程默认自带消息队列和消息循环,工作线程需要手动实现消息循环),因此可以采用消息进行线程间通信se转载 2016-02-29 12:33:17 · 6900 阅读 · 1 评论 -
值得推荐的C/C++框架和库
值得学习的C语言开源项目- 1. WebbenchWebbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.c转载 2016-04-26 08:52:55 · 324 阅读 · 0 评论 -
socket 通信关于bind那点事
结论:1、采用TCP通信时,客户端不需要bind()他自己的IP和端口号,而服务器必须要bind()自己本机的IP和端口号;2、若采用UDP通信时(这里是有客户端和服务器之分才这么说的,若是指定特定端口的UDP对等通信则不一样了),客户端也可以不需要bind()他自己的IP和端口号,而服务器需要bind自己IP地址和端口号;原因:1、因为服务器是时时在监听有没有转载 2016-07-01 16:31:55 · 417 阅读 · 0 评论 -
std::string类详解
std::string类详解之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。标准模板库转载 2014-02-19 19:38:23 · 859 阅读 · 0 评论 -
从printf谈可变参数函数的实现
1. 使用情形1.int a =10;2.double b = 20.0;3.char *str = "Hello world";4.printf("begin print\n");5.printf("a=%d, b=%.3f, str=%s\n", a, b, str);6....从printf的转载 2013-06-03 22:33:44 · 473 阅读 · 0 评论 -
堆栈入门——堆和栈区别
在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于很多的初学着来说,堆栈是一个很模糊的概念。堆栈:一种数据结构、一个在程序运行时用于存放的地方,这可能是很多初学者的认识,因为我曾经就是这么想的和汇编语言中的堆栈一词混为一谈。我身边的一些编程的朋友以及在网上看帖遇到的朋友中有好多也说不清堆栈,所以我想有必要给大家分享一下我对堆栈的看法,有说的不对的地方请朋友们不吝赐教转载 2013-05-30 11:50:52 · 420 阅读 · 0 评论 -
深入研究析构函数
析构函数是C++中一个神奇的部分,在调用析构函数时,并不需要像普通函数一样写出函数调用的代码,而是由编译器将析构函数插入到程序中合适的调用地方。如果你不清楚这些插入析构函数的地方,就会出现一些很难解决的错误。在分析析构函数的执行时,一个经典的示例是全局变量的析构过程。我们来考虑下面的代码:01.#include< STDAFX.H >02.CcomPtr g转载 2013-06-03 22:28:15 · 559 阅读 · 0 评论 -
C 程序的外部变量与函数
C程序由一组对象组成,这些对象包括程序中所使用的变量和实现特定功能的函数。变量可以分为函数内部定义、使用的变量和函数外部定义的变量,通常情况下,把函数内部定义、使用的变量称为内部变量或局部变量,而将在函数外部定义的、供许多函数所使用的变量称为外部变量,一般情况下,也可以称为全局变量。由于C语言不允许在一个函数中定义其他函数,因此函数本身是外部的。一般情况下,也可以说函数是全局函数。在缺转载 2013-06-03 22:30:58 · 564 阅读 · 0 评论 -
C++编程对缓冲区的理解
什么是缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。为什么要引入缓冲区我们为什么要引入缓冲区呢?比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲转载 2013-06-03 22:34:33 · 534 阅读 · 0 评论 -
在C++中实现C#的delegate机制
由于这段时间较忙,自从上次我发布了一个供初学者学习的“MFC”程序后,就没怎么写文章了。这段时间在忙新的项目,项目逻辑还算复杂,用了好多有闪光点的技术,下面我要讨论的是闪光点之一:在C++中实现C#的delegate机制。用过C#的朋友都觉得C#的确是个好语言,但有时由于特殊需要,不得不用C++,在C++中要想实现C#中的Thread等也是可行的,不过代码要稍复杂。以例子来说明:转载 2013-06-03 22:35:52 · 695 阅读 · 0 评论 -
C++的static关键字
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:01.//Example转载 2013-06-03 22:36:59 · 436 阅读 · 0 评论 -
Linux系统共享库编程
一、说明类似Windows系统中的动态链接库,Linux中也有相应的共享库用以支持代码的复用。Windows中为*.dll,而Linux中为*.so。下面详细介绍如何创建、使用Linux的共享库。二、创建共享库在mytestso.c文件中,代码如下:01.#include 02.#include 03. 04.int GetM转载 2013-06-03 22:40:38 · 465 阅读 · 0 评论 -
C++编译器如何实现异常处理
译者注:本文在网上已经有几个译本,但都不完整,所以我决定自己把它翻译过来。虽然力求信、雅、达,但鉴于这是我的第一次翻译经历,不足之处敬请谅解并指出。与传统语言相比,C++的一项革命性创新就是它支持异常处理。传统的错误处理方式经常满足不了要求,而异常处理则是一个极好的替代解决方案。它将正常代码和错误处理代码清晰的划分开来,程序变得非常干净并且容易维护。本文讨论了编译器如何实现异常处理。我将假转载 2013-06-03 22:43:23 · 1470 阅读 · 0 评论 -
几个 Windows 到 Linux 的代码移植问题
1、在 Linux 实现 Win32 API 之 GetTickCount 函数为了将 Windows 中的 GetTickCount API 函数移植到 Linux,可以使用如下的代码:1.long GetTickCount()2.{3.tms tm;4.return times(&tm);5.}2、Windows 和 L转载 2013-06-03 22:44:45 · 457 阅读 · 0 评论 -
指针专题
一、数组的指针、指针数组以及指向指针的指针考虑数组的指针的时候我们要同时考虑类型和维数这两个属性。换一句话,就是说一个数组排除在其中存储的数值,那么可以用类型和维数来位置表示他的种类。A)一维数组 在c和c++中数组的指针就是数组的起始地址(也就第一个元素的地址),而且标准文档规定数组名代表数组的地址(这是地址数值层面的数组表示)。例如:1.int a[10];2.i转载 2013-06-03 22:29:59 · 460 阅读 · 0 评论 -
常用编码详解
一、通用字符集(UCS)ISO/IEC 10646-1 [ISO-10646]定义了一种多于8比特字节的字符集,称作通用字符集(UCS),它包含了世界上大多数可书写的字符系统。已定义了两种多8比特字节编码,对每一个字符采用四个8比特字节编码的称为UCS-4,对每一个字符采用两个8比特字节编码的称为UCS-2。它们仅能够对UCS的前64K字符进行编址,超出此范围的其它部分当前还没有分配编址。转载 2013-06-03 22:32:17 · 782 阅读 · 0 评论 -
C++ 著名类库整理
在 C++中,库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级到重 量级的都有。不少都是让人眼界大开,亦或是望而生叹的思维杰作。由于库的数量非常庞大,而且限于笔者水平,其中很多并不了解。所以文中所提的一些库都是比较著名的大型库。1、C++各大有名库的转载 2016-12-19 14:17:25 · 492 阅读 · 0 评论