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

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

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;

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5670301.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存