随笔分类 - C++ FuncCall
摘要:在编程中,if-else和switch-case是很常见的分支结构,很少在程序中不用这些控制语句。但是不能否认,在一些场景下,由于分支结构过分长,导致代码不美观且不容易维护,在《重构》一书中,也将过长的switch语句当做了“坏味道”。例如当我们处理从网络接收到的数据时,往往会由于种类太多而写一长段
阅读全文
摘要:关于头文件和源文件的分别 首先,我们可以将所有东西都放在一个.cpp文件内. 然后编译器就将这个.cpp编译成.obj,obj是什么东西? 就是编译单元了.一个程序,可以由一个编译单元组成, 也可以有多个编译单元组成. 如果你不想让你的源代码变得很难阅读的话, 就请使用多个编译单元吧.(一个函数不能
阅读全文
摘要:关键字 __stdcall、__cdecl和__fastcall可以直接加在要输出的函数前,也可以在编译环境的Setting.../C/C++ /Code Generation项选择。当加在输出函数前的关键字与编译环境中的选择不同时,直接加在输出函数前的关键字有效。它们对应的命令行参数分别为/Gz、
阅读全文
摘要:调用约定:__cdecl__fastcall与__stdcall,三者都是调用约定(Callingconvention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以及产生函数修饰名的方法。1、__stdcall调用约定:函数的参数自右向左通过栈传递,被调用的...
阅读全文
摘要:函数调用规范当高级语言函数被编译成机器码时,有一个问题就必须解决:因为CPU没有办法知道一个函数调用需要多少个、什么样的参数。即计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调。为此,计算机提供了一种被称为栈的数据结构来支持参数传递。 函数调用时,调用者依次把参数压...
阅读全文
摘要:在C++中,由于重载等技术的存在,编译器要将函数、结构体、类等等的信息传递给链接器,就不能像C语言那样简单地通过函数名来完成,它需要提供额外的参数信息,而还要和C语言共用链接器,这就需要用到名字改编(name mangling),又叫名字修饰(name decoration)。名字改编也罢,但由于历...
阅读全文
摘要:比如QString有两个函数,可以堂而皇之的存在,原因就在于有了const修饰以后,编译器不把两个函数当作同一个函数名了:QChar *data()const QChar *data() consthttp://doc.qt.io/qt-5/qstring.html#datahttps://gith...
阅读全文
摘要:在C++中,成员函数的指针是个比较特殊的东西。对普通的函数指针来说,可以视为一个地址,在需要的时候可以任意转换并直接调用。但对成员函数来说,常规类型转换是通不过编译的,调用的时候也必须采用特殊的语法。C++专门为成员指针准备了三个运算符: "::*"用于指针的声明,而"->*"和".*"用来调用指针...
阅读全文
摘要:函数调用规范当高级语言函数被编译成机器码时,有一个问题就必须解决:因为CPU没有办法知道一个函数调用需要多少个、什么样的参数。即计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调。为此,计算机提供了一种被称为栈的数据结构来支持参数传递。 函数调用时,调用者依次把参数压...
阅读全文
摘要:一、 函数参数传递机制的基本理论 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。以下讨论称调用其他函数的函数为主调函数,被调用的函数为被调函数。 值传递(passl-by-value)过程中,被调函数...
阅读全文
摘要:“FFI” 的全名是 Foreign Function Interface,通常指的是允许以一种语言编写的代码调用另一种语言的代码。而 “Libffi” 库只提供了最底层的、与架构相关的、完整的”FFI”,因此在它之上必须有一层来负责管理两种语言之间参数的格式转换。 高级语言编译器产生代码时都会依据
阅读全文
摘要:比如你用local在栈上定义了一个局部变量LocalVar,你知道实际的指令是什么么?一般都差不多像下面的样子: push ebp mov esp, ebp sub esp, 4 现在栈上就有了4各字节的空间,这就是你的局部变量。 接下来,你执行mov LocalVar, 4,那么实际的指令又是什么
阅读全文
摘要:_stdcall和_cdecl两种调用方式的区别 (2013-01-13 10:07:40)转载▼ 在看代码的时候遇到很多_stdcall修饰的函数,很是不明白到底什么意思,所以在网上搜了一些资料如下:其实要弄懂这个东西,我觉着汇编知识还是需要再回头复习一下:(1) _stdcall调用 _stdc
阅读全文
摘要:函数的调用规则各种调用方式,总是记不住,这里做个笔记(我这里只是速记,具体见文章最下边):microsoft的vc默认的是__cdecl方式,而windows API则是__stdcall,如果用vc开发dll给其他语言用,则应该指定__stdcall方式。调用约定可以通过工程设置:Setting....
阅读全文
摘要:C++ 宏函数 比如定义一个求两者最大值的宏函数: #define MAX(a,b) ((a)>(b)?(a):(b)) 注意1,MAX后不能有空格。2,每个变量最好用括号括起来。3,末尾不要加分号 面试题:写一个求整数a的第n位是1还是0的宏函数 答案:#define fun(a,n) ((a)&
阅读全文

浙公网安备 33010602011771号