C
First Snowflakes
捡贝壳
展开
-
C++ C中的size_t
Ref:https://jeremybai.github.io/blog/2014/09/10/size-t原创 2021-01-06 12:37:38 · 185 阅读 · 0 评论 -
基于cmake生成动态库,静态库,并调用
绝望的时候抬头看看,希望就在不远处闪闪发光。工程实践中,经常遇到动态库、静态库的创建和使用,使用cmake可以方便地完成跨平台编译。此例,写了一个用于实现加法和减法的类,并将其编译成动态库和静态库,并由可执行文件来调用它们。静态库:SolutionDLL动态库:SolutionStaticLib调用动态库的可执行文件: CallDLL调用静态库的可执行文件:CallStaticLibVs solution:Code:https://github.com...原创 2020-12-19 22:48:24 · 970 阅读 · 4 评论 -
关于static变量的文件作用域
Scenario A :在一个头文件中都有staic int a=9; 然后,此头文件被多个cpp文件包含,不会报错,因为static的变量具有文件作用域。如果去掉static,则报错重复定义错误了。Scenario B:在a.cpp中定义两个全局变量:static int gStaticA = 8;int gNostaticA = 9;然后,在另一个cpp文件中可以通过extern int gNostaticA;来使用a中定义的该变量; 但是不能extern int ...原创 2020-11-01 11:05:32 · 918 阅读 · 0 评论 -
char与signed char, unsigned char的区别
三者之间关系1) ANSI C 提供了3种字符类型,分别是char、signed char、unsigned char。而不是像short、int一样只有两种(int默认就是unsigned int).2) 三者都占1个字节.3) signed char取值范围是 -128 到 127(有符号位), unsigned char 取值范围是 0 到 255.4) 内存中一串二进制,它的含义,就是这个类型来说明的。5) 所谓signed char 和 unsigned cha...原创 2020-10-27 21:50:39 · 4068 阅读 · 0 评论 -
heap内存模型
https://blog.csdn.net/qq_25072517/article/details/89852643#include "stdlib.h"#include "stdio.h"https://blog.csdn.net/mmshixing/article/details/51679571https://blog.csdn.net/qq_37764129/article/details/81705651?utm_medium=distrib...原创 2020-10-27 09:24:09 · 240 阅读 · 0 评论 -
c++支持函数重载, c语言不支持!
对于一个函数,例如void fun(int x); c++中,编译器会对该函数名进行修饰,例如,变为_fun_int, 而,C语言中,编译器对函数名不会根据入参进行修饰,从而,如果c语言中两个函数的名字如果相同,即使入参不同,也会产生链接错误。...原创 2020-10-07 23:01:30 · 118 阅读 · 0 评论 -
c语言 void指针作为函数参数时如何判断传入的参数的具体类型
方法1:自己定义一些数据结构,数据结构的第一个字段都是一个int整数,表明当前结构是什么类型。在函数中将void 强制转换为int,取出那个标志,再根据标志指示的类型来把void *进一步转换为相应的结构的指针。struct my_struct { int a; int b;};int main () {struct my_struct *p = malloc(sizeof(struct my_struct));p->a = 1;p->b = 2;...原创 2020-10-07 22:55:49 · 1591 阅读 · 0 评论 -
字节对齐 #pragma pack指令
#pragma pack用于指示编译器,设置数据在内存中的对齐方式。#pragma pack (n) 作用:编译器将按照n个字节对齐。Ref:https://blog.csdn.net/sweetfather/article/details/78487563原创 2020-10-07 22:50:00 · 240 阅读 · 0 评论 -
C 标准库 - <assert.h>以及在cpp中的使用
C 标准库的 assert.h头文件提供了一个名为 assert 的宏,它可用于验证程序做出的假设,并在假设为假时输出诊断消息。Note:用#include <assert.h> 而不是#include <assert>进行包含!assert 原型:void assert (int expression); 说明:aserrt 是一个宏而非函数,实际并不具有函数原型。当它被执行时,判断 expression 的真假,如果为假,它就向标准错误打印....原创 2020-09-27 22:22:50 · 388 阅读 · 0 评论 -
C++ new和delete的实现原理
new和delete的实现是通过调用malloc和free函数。new和delete不仅承载着内存分配的功能还承载着对象构造函数的调用功能。new 操作符的执行过程:1. 调用operator new分配内存 ;2. 调用构造函数生成类对象;3. 返回相应指针。new和operator new之间的联系A* a = new A;分为两步:1.分配内存,2.调用A()构造对象。分配内存这一操作就是由operator new(size_t)来完成的,如果类A重载了o...原创 2020-05-27 08:28:37 · 446 阅读 · 0 评论 -
c++ 正则表达式
c++正则表达式的三部分1)正则匹配2)正则搜索3)正则替换正则搜索 案例1:读入一个文件,从中提取第一个“key number"中的number并返回//读入一个文件,从中提取key 0.36中的0.36并返回float getParamByKey(const std::string& filePath, const std::string paramName) { if (/*filtpath不存在*/) { std::cerr ...原创 2020-05-19 22:28:58 · 576 阅读 · 0 评论 -
C++的静态多态与动态多态
C++的两种多态形式:静态多态 & 动态多态静态多态静态多态:也称为编译期间的多态,编译器在编译期间完成的,编译器根据函数实参的类型推断出要调用那个函数,如果有对应的函数就调用该函数,否则出现编译错误。静态多态的两种实现方式:#函数重载:包括普通函数的重载和成员函数的重载。(重载函数的关键是函数参数列表——也称函数特征标,包括:函数的参数数目和类型,以及参数的...原创 2020-05-04 09:25:41 · 527 阅读 · 1 评论 -
for循环里i++和++i的区别
i++是在使用当前值之后再+1,所以需要一个临时的变量来转存。而++i则是在直接+1,省去了对内存的操作的环节,相对而言能够提高性能.Ref:https://www.cnblogs.com/Paul-Yellow/p/10900475.htmlhttps://www.jianshu.com/p/dd35ffcf6c08...原创 2020-03-21 21:03:17 · 1088 阅读 · 0 评论 -
C中的inline用法
https://www.cnblogs.com/fnlingnzb-learner/p/6423917.html在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数。栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间。在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足而导致程序出错的问...原创 2020-03-21 20:00:20 · 268 阅读 · 0 评论 -
ASCII编码与Unicode编码
ASCII码一个字节(Byte)有8个二进制位,有256种状态,每种状态对应一个符号,就是256个符号,从00000000到11111111。计算机诞生于美国,早期的计算机使用者大多使用英文,上世纪60年代,美国制定了一套英文字符与二进制位的对应关系,称为ASCII码,沿用至今。ASCII码规定了128个英文字符与二进制的对应关系,占用一个字节(实际上只占用了一个字节的后面7位...原创 2020-03-15 21:46:28 · 2017 阅读 · 0 评论 -
#include 头文件的顺序导致的编译问题
某日,在调用第三方库的时候遇到了如下问题:第三方软件商提供了一个头文件,xxx.h,其中使用到了windows的HMODULE类型,但是xxx.h中并没有include wondows.h。同时,第三方软件上提供了一个demo,其使用到了xxx.h:#include <windows.h> ---line 1#include <xxx.h> -...原创 2020-03-15 21:10:39 · 1382 阅读 · 0 评论 -
switch - case 中不能定义变量 的解决办法
在case中加上{}括起来,限定一下作用域。E.g:switch(){ case: xxx{ break; }}知乎讨论:https://www.zhihu.com/question/230516851)不能跳过的不是变量的定义,而是初始化。把int ival改成int ival=0;则不会编译通过;...原创 2020-03-08 21:46:44 · 5711 阅读 · 1 评论 -
C 标准库 -- time
time.h 头文件定义了四个变量类型、两个宏和各种操作日期和时间的函数.https://www.runoob.com/cprogramming/c-standard-library-time-h.html使用time.h中的clock函数获取时间间隔: clock_t start, finish; double Total_time; start = c...原创 2020-02-29 23:53:48 · 200 阅读 · 0 评论 -
__stdcall
e.g.相关介绍:1.Win32 x86 Calling Conventionshttps://www.codeproject.com/Reference/672254/Win-x-Calling-Conventions2. 微软文档https://docs.microsoft.com/en-us/cpp/cpp/stdcall?view=vs-2019...原创 2020-02-29 23:32:17 · 167 阅读 · 0 评论 -
C语言volatile关键字
“不妨大胆一些,爱一个人,攀一座山,追一个梦。”----- 大鱼海棠volatile是一个类型修饰符(type specifier), 防止编译器对代码进行优化。volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。 volati...原创 2019-03-31 23:01:49 · 792 阅读 · 0 评论