C语言(面试)

1、预编译(何时)

  • 整个编译最先做的工作,不经常改动大型代码体;
  • 所有模块都使用标准头文件

2、#define MIN(x,y)  ((x) < (y) ? (x) : (y))           没有分号

3、#是将宏转化为字符串的运算符,##是把两个宏参数连接的运算符

4、避免头文件被重复包含

#ifndef  __xxx_H  
#define  __xxx_H
#endif

5、static关键字

  • 修饰存储类型(静态存储)
  • 修饰链接属性(内部链接)
  •  函数内定义:静态局部变量存储内存静态区;  
  • 函数外定义:静态全局变量作用域仅在当前文件,不能被其他文件通过extern 引用
  • 静态函数只能在声明它的源文件中使用
  • 全局变量存储在静态数据区,局部变量在堆栈中。函数内局部变量:自动变量,形参存储在栈中;malloc手动创建存储在堆中;

6、const关键字(相关值与地址不能修改)

  • 修饰常变量;
  • 修饰函数形参;
  • 修饰函数返回值;

7、volatile关键字:指定的关键字可能被系统,硬件,进程/线程改变,所以强制编译器每次从内存中取值,而不是直接从寄存器中取值(eg:多线程被多个任务共享的变量)

8、extern 关键字:表明该变量或函数在别的文件中定义,提示编译器查找;

  • c++文件调用c使用extern "C"
 #ifdef __cplusplus        

  extern "C"  
  {  
 #endif


 #ifdef __cplusplus        
  }  
 #endif

9、inline关键字是建议编译器做内联展开处理,即是将函数直接嵌入调用程序主体,省去调用/返回指令

10、引用与指针区别

11、#include <xxx.h> 前者是从standard lib路径中寻找引用 ;

       #include "xxx.h"  当前工作路径寻找引用

12、实时系统:在特定时间内完成特定任务,实时与可靠

13、堆:由程序员分配释放,栈:由编译器分配释放

14、中断可重入函数:多任务环境中可以被中断的函数
可以在这个函数执行的任何时刻中断它,转入 OS 调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。

不可重入:

  • 函数体内使用静态数据结构
  • 函数体内调用malloc()/free()函数
  • 如果其他线程调用该变量,会导致中断处理函数不能及时返回,导致中断丢失问题

在多线程环境中,且没有加锁的情况下,对同一段内存进行并发读写,就会造成泄露。

15、strcpy()与strncpy代替使用;memcpy()

16、大小端模式

  • 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。
  • 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值