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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值