栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++进阶⑧:从c++文件到生成exe文件经过哪些步骤、内置类型值传递效率最高、extern、* ( * (&arr+1)-1)、结构体(struct)的定义方式

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++进阶⑧:从c++文件到生成exe文件经过哪些步骤、内置类型值传递效率最高、extern、* ( * (&arr+1)-1)、结构体(struct)的定义方式

1 从c++文件到生成exe文件经过哪些步骤

C++ 文件到生成exe文件需要经过预处理、编译、汇编和链接几个步骤。

  1. 预处理:在预处理阶段,编译器主要作加载头文件、宏替换、条件编译的作用。
  2. 编译:在编译过程中,编译器主要作语法检查和词法分析。可以通过使用 -S选项来进行查看,该选项预处理之后的结果翻译成汇编代码。
  3. 汇编:在汇编过程中,编译器把汇编代码转化为机器代码。
  4. 链接:链接就是将目标文件、启动代码、库文件链接成可执行文件的过程。
2 内置类型值传递效率最高

  内置类型数据在传入函数时,使用值传递方式的效率要高于引用传递和指针传递,因此编译器会采用效率最高的方式来实现参数传递,当然也允许用户更改,事实上包括STL中的迭代器和函数对象也都是默认采用值传递的方式来实现的。
Leetcode有一题在递归中传递了int&,还是使用全局变量比较好。

  至于其他类型如自定义类,如果采用值传递则会涉及拷贝构造函数和析构函数的调用问题,通常会影响性能,所以一般采用引用和指针传递的形式,通常交由用户决定。

3 extern

在C语言中,修饰符extern用在变量或者函数的声明前,用来说明**“此变量/函数是在别处定义的,要在此处引用”。**

4 int arr[5]={1,2,3,4,5}; 则 * ( * (&arr+1)-1)

&arr 的类型是 int (*)[5]。
&arr + 1表示跳过了整个数组,即20个字节,指向最后一个元素的下一个地址。
*(&arr + 1) - 1指向元素5
* ( * (&arr+1)-1) == 5.

5 结构体(struct)的定义方式

6中结构体定义方式

①注意定义结构体sum1时要加上struct。

struct data
{
    char aa;
    char bb;
    char cc;
    int dd;
};
struct data sum1, sum2;

②用typedef的方式更简便。

typedef struct
{
    char aa;
    char bb;
    char cc;
    int dd;
}DATA;

DATA sum3;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/665033.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号