C++程序设计基础(1)程序的编译和执行

简介: 注:读《程序员面试笔记》笔记总结1.编译执行过程1.1预处理:(1)所有以#开头的代码都属于预处理的范畴:#include,#define,#ifdef(#ifndef,#endif),#other(其他宏指令)(2)处理预定义的宏:例如__DATA__,__FILE__(前后都是两个下划...

注:读《程序员面试笔记》笔记总结

1.编译执行过程

1.1预处理:

(1)所有以#开头的代码都属于预处理的范畴:#include,#define,#ifdef(#ifndef,#endif),#other(其他宏指令)

(2)处理预定义的宏:例如__DATA__,__FILE__(前后都是两个下划线)

(3)用一个空格代替连续的注释

(4)处理三元符:例如将??=替换成#(针对很古老的键盘,现在一般较少出现)

1.2编译:

对预处理后的代码进行词法、语法、语义分析,生成汇编代码(.s)

1.3汇编:

将汇编代码生成机器指令,生成目标文件(.o)

1.4链接:

和其他的目标文件以及库文件生成可执行程序

2.面试题

2.1简述#include<>和#include" "的区别

答案:#include直接从编译器指定的路径进行搜索,找不到则报错;

#include“ ”则先从程序所做目录进行搜索,然后再到编译器指定路径进行搜索,(自定义的此种方式合适),搜索不到报错。

2.2简述#和##在define中的作用

答案:宏定义中的#运算符将其后面的参数转换成字符串;

宏定义中的##运算符将其前后的参数进行字符串连接。

 1 #define PRINTCUBE(x)    cout<<"cube("<<#x<<")="<<(x)*(x)*(x)<<endl;
 2 
 3 PRINTCUBE(5);
 4 
 5 //output:
 6 //cube(5)=125
 7 
 8 #define LINK3(x,y,z)    x##y##z
 9 
10 LINK3(3,5,0)
11 
12 //output:
13 //"350"

2.3简述assert断言的概念

答案:assert用于程序的DEBUG版本中检测条件表达式,如果结果为假,则输出诊断信息并终止程序。

注意点:(1)assert是一个带参数的宏,不是一个函数;

(2)在#include语句前加入#define NDEBUG则禁用assert宏(即含有assert的语句都会被忽略);

(3)在RELEASE中assert会被忽略(即含有assert的语句都会被忽略);

(4)一个assert最好只有一个条件判断语句;

1 //修改前
2 assert(grade>0 && grade<=6);
3 //修改后
4 assert(grade>0);
5 assert(grade<=6);

(5)在assert中不要去修改变量的值,否则在RELEASE中被忽略掉,造成结果不同;

1 //修改前
2 assert(success++>60);
3 //修改后
4 assert(success>60);
5 success++;

(6)对用户的参数输入判断时,使用if语句来参数合法性检测,不要用assert。

相关文章
|
28天前
|
存储 缓存 算法
【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能
【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能
113 0
|
30天前
|
安全 编译器 C++
【C++20概念】编译时多态性的力量
【C++20概念】编译时多态性的力量
46 0
|
1月前
|
存储 C++ 开发者
C++程序设计基础:构建稳固的编程基石
C++程序设计基础:构建稳固的编程基石
23 1
|
23天前
|
存储 缓存 C++
C++链表常用的函数编写(增查删改)内附完整程序
C++链表常用的函数编写(增查删改)内附完整程序
|
29天前
|
算法 编译器 程序员
深入理解C++编译模式:了解Debug和Release的区别
深入理解C++编译模式:了解Debug和Release的区别
62 2
|
30天前
|
算法 编译器 C++
【C++ 泛型编程 中级篇】C++ 编译时技术:探索 if constexpr 和 std::enable_if
【C++ 泛型编程 中级篇】C++ 编译时技术:探索 if constexpr 和 std::enable_if
40 0
|
30天前
|
安全 算法 编译器
【C++ 静态断言的技巧】掌握C++中static_assert的力量:深入探讨编译时检查
【C++ 静态断言的技巧】掌握C++中static_assert的力量:深入探讨编译时检查
42 1
|
30天前
|
存储 算法 编译器
【C++ 关键字 static_assert 相关问题】C++ 关于静态断言的编译问题 ,深入了解静态断言
【C++ 关键字 static_assert 相关问题】C++ 关于静态断言的编译问题 ,深入了解静态断言
28 0
|
1月前
|
编解码 算法 程序员
【C++ 泛型编程 高级篇】 C++ 14 模版元编程 遍历元组 编译期生成整数序列 std::index_sequence和std::make_index_sequence 使用指南(三)
【C++ 泛型编程 高级篇】 C++ 14 模版元编程 遍历元组 编译期生成整数序列 std::index_sequence和std::make_index_sequence 使用指南
27 0
|
1月前
|
C++ 索引
【C++ 泛型编程 高级篇】 C++ 14 模版元编程 遍历元组 编译期生成整数序列 std::index_sequence和std::make_index_sequence 使用指南(二)
【C++ 泛型编程 高级篇】 C++ 14 模版元编程 遍历元组 编译期生成整数序列 std::index_sequence和std::make_index_sequence 使用指南
26 0

热门文章

最新文章