vlambda博客
学习文章列表

C语言的一些重要概念(一)

后期的代码编写,会用到一些C语言。

1、关键字static的作用是什么?

作用:修饰变量或函数

    1.改变作用域

    2.延长生命周期

    修饰局部变量:静态局部变量,存储位置由栈区变为数据区(初始化:.data,未初始化:.bss),延长生命周期

    修饰全局变量:限定作用域,只能在本文件中使用  (防止别人写的模块误用。)

    修饰函数:限定作用域,只能在本文件中使用

    static修饰的局部变量,只初始化一次:


2、“引用”与指针的区别是什么?


3、.h头文件中的ifndef/define/endif的作用?

主要作用是防止重复引用,比如一个头文件定义如下:
#ifndef _HEAD_H_
#define _HEAD_H_
//代码部分
#endif
假如该头文件第一次被引用,_HEAD_H_没有被定义,所以就执行宏定义,直到#endif
该头文件第二次被引用的时候,_HEAD_H_已经被定义,下面的语句就不会执行


4、#include<file.h> 与#include"file. h"的区别?

当用#include“file.h”时,先搜索当前工作目录,如果没有,再去搜索库,库没有再搜索资源库;
当用#include<file.h>时,编译器先从标准库路径开始搜索,如果没再搜索资源库目录,最好搜索当前工作目录。


5、描述实时系统的基本特性

通常,实时操作系统必须有以下特征:
1)多任务;
2)有线程优先级
3)多种中断级别


6、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

1、关于全局变量能否在头文件中声明的问题,答案是可以的。
2、在不同的C文件中各自用static声明的全局变量,变量名尽管可能相同,但是各自C文件中的全局变量的作用域为该文件,所以互相之间不干扰。
3、对于在头文件中定义static 变量的问题。包含该头文件的所有c文件都定义了一个该文件的全局变量。更详细的关于这个的问题解析,可以参考下面这个链接:


7、什么是预编译,何时需要预编译?

预编译又称为预处理,是做些代码文本的替换工作
处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等
就是为编译做的预备工作的阶段
主要处理#开始的预编译指令
预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。


8、结构与联合有和区别?

Struct与Union主要有以下区别:

1.struct和union都是由多个不同的数据类型成员组成, 但在任何同一时刻, union中只存放了一个被选中的成员, 而struct的所有成员都存在。在struct中,各成员都占有自己的内存空间,它们是同时存在的。一个struct变量的总长度等于所有成员长度之和。在Union中,所有成员不能同时占用它的内存空间,它们不能同时存在。Union变量的长度等于最长的成员的长度。

2. 对于union的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于struct的不同成员赋值是互不影响的。