![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c/c++/boost
文章平均质量分 65
HeathXian
嵌入式 分布式后端 网络安全 主机安全
展开
-
上帝函数C
“上帝函数”是指实现了高级策略的函数。如果在程序中使用这种函数,会导致链接器向可执行文件中添加许多库函数。在嵌入式系统中,可执行文件的增大会耗尽物理内存;而在桌面级计算机上,可执行文件的增大则会增加虚拟内存分页。在许多现有的库中都存在着性能昂贵的上帝函数。优秀的库在设计时会移除这些函数。但是如果将库作为框架设计,则无法避免上帝函数。#include <stdio.h>int main(int, char **){ printf(“hello world !\n”)原创 2022-03-23 14:11:38 · 932 阅读 · 0 评论 -
多线程下的信号
5. 线程和信号5.1 多线程中的信号(1)在Linux的多线程中使用信号机制,与在进程中使用信号机制有着根本的区别。在进程环境中,对信号的处理是,先注册信号处理函数,当信号异步发生时,调用处理函数来处理信号。它完全是异步的。因此,信号处理函数里有时要考虑某些函数可重入或被异步信号中断后的处理。(2)然而,多线程中处理信号的原则却完全不同,它的基本原则是:将对信号的异步处理,转换成同步处理,也就是说用一个线程专门的来“同步等待”信号的到来,而其它的线程可以完全不被该信号中断/打断(interru转载 2022-02-25 11:02:07 · 1203 阅读 · 0 评论 -
C++ typename
C++ typename的起源与用法侯捷在Effective C++的中文版译序中提到:C++的难学,还在于它提供了四种不同(但相辅相成)的程序设计思维模式:procedural-based, object-based, object-oriented, generics对于较少使用最后一种泛型编程的我来说,程序设计基本上停留在前三种思维模式当中。虽说不得窥见高深又现代的泛型技术,但前三种思维模式已几乎满足我所遇到的所有需求,因此一直未曾深入去了解泛型编程。目录起因 type.转载 2021-05-24 12:03:20 · 224 阅读 · 0 评论 -
SYS_gettid与__NR_gettid区别
SYS_gettid与__NR_gettid区别实际没有区别#define SYS_gettid __NR_gettid原创 2021-05-06 11:07:33 · 1042 阅读 · 1 评论 -
智能指针之auto_ptr、unique_ptr、shared_ptr
C++11中的四种智能指针前言C++ STL 提供了四种智能指针:auto_ptr、unique_ptr、shared_ptr 和 weak_ptr。其中auto_ptr 是 C++98 提供的解决方案,C+11 已将其摒弃,并提出了 unique_ptr 作为 auto_ptr 替代方案。虽然 auto_ptr 已被摒弃,但在实际项目中仍可使用,但建议使用较新的 unique_ptr,因为 unique_ptr 比 auto_ptr 更加安全。shared_ptr 和 weak_ptr 则是 C+转载 2021-03-04 22:42:26 · 427 阅读 · 1 评论 -
阿里巴巴c++复习
1、c++基础知识变量的声明和定义有什么区别.为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,但是只在一个地方定义。加入extern修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义。说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,如外部变量。 sizeof和strlen的区别 sizeof是一个操作符,strlen是库函数。 sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结...转载 2020-12-12 18:53:23 · 560 阅读 · 0 评论 -
智能指针 smart pointer
智能指针-复制构造 设计具有指针成员的类时,首先需要决定的是该指针应提供什么行为。例如将一个指针复制到另一个指针时,两个指针指向同一个对象。当两个指针指向同一对象时,可能使用任一指针改变基础对象。类似地,很可能一个指针删除了一对象时,另一指针的用户还认为基础对象仍然存在。大多数C++类采用三种方法之一管理指针成员: 1.指针成员采取常规指针型行原创 2017-03-21 17:52:14 · 514 阅读 · 0 评论 -
c/c++内存分配方式
基本知识在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。1.堆区(heap)—就是那些由malloc 或 new 分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete,malloc对应free。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。注意它与数据结构中的堆是两回事,分配方式倒转载 2013-07-01 11:03:23 · 1778 阅读 · 1 评论 -
C语言标准库 - stdio.h
C语言标准库 - stdio.h1 输入与输出<stdio.h>头文件<stdio.h>定义了用于输入和输出的函数、类型和宏。最重要的类型是用于声明文件指针的FILE。另外两个常用的类型是size_t和fpos_t,size_t是由运算符sizeof产生的无符号整类型;fpos_t类型定义能够唯一说明文件中的每个位置的对象。由头部定义的最有用的宏是EOF,其值代表文...转载 2013-05-07 10:59:36 · 2657 阅读 · 0 评论 -
typedef struct与struct的区别
第一篇:typedef struct与struct的区别1. 基本解释typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。在编程中使用typedef目的一般有两个: 一 个是给变量一个易记且意义明确的新名字. 另一个是简化一些比较复杂的类型声明。至于...转载 2013-05-30 21:02:25 · 860 阅读 · 0 评论 -
可变参数
可变参数函数的原型声明格式为:type VAFunction(type arg1, type arg2, … );va_list arg_ptr:定义一个指向个数可变的参数列表指针;va_start(arg_ptr, argN):使参数列表指针arg_ptr指向函数参数列表中的第一个可选参数,说明:argN是位于第一个可选参数之前的固定参数,(或者说,最后一个固定参数;…之前...转载 2013-06-28 15:17:43 · 839 阅读 · 0 评论 -
union and struct
http://www.th7.cn/Program/c/201212/114923.shtml C语言结构对齐,变量存放地址与内存分配。原创 2013-11-05 15:23:43 · 783 阅读 · 0 评论 -
++ c ++
经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m=1;n=m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4,而不是4和5:a=4;cout<<a++<<a;C++不是规定<<操作左结合吗?是C++书上写错了,还是这个系统的实现有问题?要弄...转载 2016-04-10 15:15:55 · 429 阅读 · 0 评论 -
sprintf 可变参数
sprintf函数定义如下:int sprintf (char * szBuffer, const char * szFormat, ...) ;第一个参数是字符缓冲区;后面是一个格式字符串。Sprintf不是将格式化结果标准输出,而是将其存入szBuffer。该函数返回该字符串的长度。在文字模式程序设计中,printf ("The sum of %i and %i is %i", ...转载 2013-06-28 14:21:08 · 2868 阅读 · 0 评论 -
void assert( int expression );
编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新起用断言。Assert - 断言使用断言可以创建更稳定,品质更好且不易于出错的代...转载 2013-08-13 15:27:42 · 1132 阅读 · 0 评论 -
youxiudeboke
优秀的博客:http://blog.chinaunix.net/uid/20622737/sid-41808-list-1.html C C++ linux andriod iphone原创 2013-06-28 14:17:09 · 673 阅读 · 0 评论 -
sscanf
sscanf(recvbuf,"%*[^/]/%[^ ]s",buf_rev); sscanf(buf, "GET /%[^ ]", buf_rev); 这个是在一个webserver.c里面的例子,通过sscanf()语句可以找到和它前面相匹配的语句然后打印出后面需要的东西,下面说下%[]:其基本格式为 %[set],表示将接收一个由set指定格式的字符串,其中set表示可转载 2015-07-11 13:45:23 · 746 阅读 · 2 评论 -
CStatic
CStatic目录简介CStatic控件的基本使用1. CStatic 用于显示文本2. CStatic 用于显示图标3. CStatic 用于显示指针cursor4. CStatic 用于显示位图简介CStatic控件的基本使用1. CStatic 用于显示文本2. CStatic 用转载 2013-08-29 17:28:54 · 864 阅读 · 0 评论 -
volatile
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。例如: volatile int i=10; int j = i; ... int k = i;转载 2013-04-17 09:01:14 · 727 阅读 · 0 评论 -
多重继承与虚继承
多重继承与虚继承 对象布局一.多重继承#include using namespace std; class Base1{public: Base1(){ cout "Base1::Base1()" virtual ~Base1(){ cout "Base1::~Base1()" virtual void转载 2013-04-17 09:04:12 · 791 阅读 · 0 评论 -
函数调用约定
函数调用约定主要约束了两件事:1.参数传递顺序2.调用堆栈由谁(调用函数或被调用函数)清理常见的函数调用约定:stdcall cdecl fastcall thiscall naked call __stdcall表示1.参数从右向左压入堆栈2.函数被调用者修改堆栈3.函数名(在编译器这个层次)自动加前导的下划线,加函数名,后面紧跟一个@符号,其后紧转载 2013-05-24 12:43:07 · 689 阅读 · 0 评论 -
全局变量
mp4tosource.obj : error LNK2005: _file_position already defined in demoDlg.objfile_position 此变量是全局变量,在其他文件(头文件)中引用 应在其前加extern原创 2013-05-13 17:32:00 · 1020 阅读 · 0 评论 -
派生类对象对基类对象进行初始化或复制
派生类对象调用基类的复制构造函数或赋值操作符时,将发生下列步骤:1.将派生类对象转换为基类引用,这仅仅意味着一个基类引用绑定到派生类对象。2.将该引用作为是参数传给复制构造函数或赋值操作符。3.那些操作使用派生类的基类部分分别对调用构造函数或赋值的基类对象的成员进行初始化或赋值。4.一旦操作符执行完毕,对象即为基类。它包含派生类的基类部分的副本,但实参的派生类部分被忽略。原创 2013-05-28 20:10:15 · 2211 阅读 · 0 评论 -
C++ namespace
一个大型软件通常是由多个模块组成的,这些模块往往是由不同的人合作完成,最后组成一个完整的程序。假如不同的人分别定义了函数和类,放在不同的头文件中,在主文件需要用到这些函数和类时,用#include命令行将这些头文件包括进来。但由于各个头文件是由不同的人设计的,可能在不同的头文件中会有相同的名字来定义函数或类,这样就会出现命名冲突的问题。同时如果在程序中用到第三方类库,也会有同样转载 2013-05-14 21:27:20 · 758 阅读 · 0 评论 -
static inline
static局部对象 应该在定义是就初始化。这种对象一旦被创建,在程序结束前都不会被撤销。 高地址 +--------------------------------------------+ 命令行参数 ---------------------------------------------原创 2013-05-29 17:15:13 · 709 阅读 · 0 评论 -
error C2894: templates cannot be declared to have 'C' linkage
error C2894: templates cannot be declared to have 'C' linkage 分析: c语言中没有template,因此将.C文件改为.cpp文件。原创 2013-06-09 10:10:30 · 1745 阅读 · 0 评论 -
回调函数
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。目录回调函数实现的机制是为什么要使用回调函数简单的回调函数实现1. 代码实现 2.转载 2013-03-01 17:01:54 · 567 阅读 · 0 评论 -
c/c++笔试题
1.求下面函数的返回值(微软)int func(x) { int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx; } 假定x = 9999。 答案:8思路:将x转化为2进制,看含转载 2013-11-18 15:23:58 · 1054 阅读 · 0 评论 -
c++ 类型转换
1. static_cast用法:static_cast ( expression )该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成子类表示)时,由于没有转载 2013-11-22 10:26:44 · 1368 阅读 · 0 评论 -
_T("") L""
Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双字节字符。Windows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。_T一般同字常数相关,如_T("Hello")。如果你编译一个程序为ANSI方式,_T转载 2014-02-11 17:24:06 · 934 阅读 · 0 评论 -
dll Loadlibaray TLS
If a DLL declares any nonlocal data or object as __declspec( thread ), it can cause a protection fault if dynamically loaded. After the DLL is loaded withLoadLibrary, it causes system failure whenev原创 2013-07-11 10:29:02 · 868 阅读 · 0 评论 -
poco 网络库
http://pocoproject.org/网络原创 2014-06-12 14:24:48 · 1114 阅读 · 0 评论 -
extern "c"
extern“c”目录extern“c”简介含义实例实例一extern "C"的惯用法展开extern“c”简介含义实例实例一extern "C"的惯用法展开编辑本段extern“c”简介extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的;其次转载 2013-02-28 10:06:15 · 654 阅读 · 0 评论