1.4 C/C++ 预处理
一、#error 的目的
#error 预处理指令的作用是,编译程序时,只要遇到 #error 就会生成一个编译错误提示消息,并停止编译。其语法格式为:#error error-message
#ifdef XXX ... #error "XXX has been defined" #else #endif
二、typedef 和 #define 有什么区别?
1、#define 是预处理命令,只是在预处理阶段进行简单机械的字符串替换,不做正确性检查;typedef 在编译时被处理,具有类型检查功能,如:
#define int_ptr (int*) int_ptr i,j //这样就会报错,相当于 int *i,int j typedef int* int_ptr int_ptr i,j //不会报错,相当于 int *i,*j
2、typedef 只是为定义类型起别名;#define 可以为变量取别名,定义常量、变量、编译开关。
3、作用域不同,#define 没有作用域,只要之前定义过,后面都可使用,而 typedef 有作用域。
void fun(){
#define A int
}
void gun(){
//这里也可以使用A,因为宏替换没有作用域,但如果上面用的是 typedef,那这里就不能用 A,不过,一般不在函数内使用 typedef
}
三、#include <filename. h> 和 #include "filename. h" 有什么区别?
对于 include <filename. h>,编译器先从标准库路径开始搜索 filename.h,使得系统文件调用较快。而对于 #include "filename.h",编译器先从用户的工作路径开始搜索 filename.h,然后去寻找系统路径,使得自定义文件较快。
四、头文件中可以定义静态变量吗?
不可以。如果在头文件中定义静态变量,则每个包含头文件的 c 文件都会包含一个静态变量的独立副本,在一个 c 文件对静态变量修改,不会导致另一个 c 文件的静态变量修改,导致逻辑混乱。
五、头文件中定义普通变量可能引发重复定义错误,只能声明
//可以这样 // good_example.h #ifndef GOOD_EXAMPLE_H #define GOOD_EXAMPLE_H extern int globalVar; #endif // good_example.c #include "good_example.h" int globalVar = 10;
六、写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个?
#define MIN(A,B) ((A) <= (B) ? (A) : (B))
七、不使用流程控制语句,如何打印出1~1000的整数?
#include <stdio. h>
#define A(x)x;x;x;x;x;x;x;x;x;
int main (){
int n=0;
A(A(A(printf("%d", ++n);
return 0;
}
C++/嵌入式开发 秋招面经 文章被收录于专栏
一名985硕,在25年秋招中斩获多个C++/嵌入式开发Offer。本专栏将分享我的面经,涵盖C/C++、操作系统、计算机网络、ARM体系与架构、Linux应用/驱动开发、Qt、通信协议及开发工具链等核心内容。
