重庆有的设计网站,外链网站,高校专业建设网站,策划工资一般多少钱目录
1. 头文件中的#ifndef / #define / #endif的作用是什么#xff1f;
2. 内存分区#xff1a;全局区、堆区、栈区、代码区简单描述#xff1f;
2.1 代码区#xff08;Text Segment#xff09;#xff1a;
2.2 全局区#xff08;Data Segment#xff09;
2. 内存分区全局区、堆区、栈区、代码区简单描述
2.1 代码区Text Segment
2.2 全局区Data Segment
2.3 堆区Heap
2.4 栈区Stack
3. C语言各数据类型的取值范围 1. 头文件中的#ifndef / #define / #endif的作用是什么
#ifndef用于判断指定的标识符是否已经被定义。如果该标识符未定义则执行下面的代码块否则跳过。
#ifndef MACRO_NAME// 如果没有定义 MACRO_NAME则编译以下内容
#endif#define用于定义指定的标识符通常用于定义宏。在条件编译中一般用来定义一个标识符以便在后面的代码中进行条件判断通常用于定义一个标识符用来标记某些代码块已经被处理过。通过定义宏来确保头文件只被包含一次。
#define MACRO_NAME#endif用于结束条件编译的代码块。 三者常用写法
#ifndef MY_HEADER_H // 如果没有定义 MY_HEADER_H
#define MY_HEADER_H // 定义 MY_HEADER_H表示头文件已经包含// 头文件内容如结构体、函数声明等#endif // 结束条件编译块工作原理 第一次包含 当编译器处理一个头文件时它遇到 #ifndef MY_HEADER_H。 如果 MY_HEADER_H 没有被定义则会进入条件编译块并定义 MY_HEADER_H通过 #define MY_HEADER_H。 然后编译器继续编译头文件的内容。 第二次及之后的包含 如果该头文件在其他地方被再次包含编译器会再次遇到 #ifndef MY_HEADER_H。 由于宏 MY_HEADER_H 已经被定义条件 #ifndef MY_HEADER_H 会失败编译器跳过头文件的内容不会重复定义和包含相同的内容。 2. 内存分区全局区、堆区、栈区、代码区简单描述
2.1 代码区Text Segment
作用存放程序的机器指令也就是程序的执行代码。
特点是只读的防止程序在运行时修改自己的指令。 通常由操作系统在程序加载时分配加载到内存中。 大小固定一般在程序编译时就确定。
2.2 全局区Data Segment
作用存放程序中的全局变量、静态变量和常量。
特点已初始化的全局变量如在程序中显式赋初值的全局变量会存放在该区域。 未初始化的全局变量存放在一个叫做BSSBlock Started by Symbol区的区域程序启动时会自动初始化为零。 全局变量在整个程序的生命周期内存在直到程序结束。 全局区在程序运行期间不会被改变大小。
2.3 堆区Heap
作用用于动态分配内存。程序运行时可以向堆区申请内存空间例如通过 malloc、new 等动态内存分配函数。
特点内存的分配和释放由程序员管理或者通过垃圾回收机制如在某些高级语言中。 堆区内存大小可以动态变化根据程序的需要增加或减少。 如果没有及时释放堆区内存可能导致内存泄漏。 堆区通常位于全局区和栈区之间。
2.4 栈区Stack
作用存放局部变量、函数参数和函数调用时的返回地址等。
特点自动管理栈的内存分配和释放由操作系统自动完成。函数调用时会自动分配栈空间函数执行完后会自动释放。 栈内存的分配遵循“后进先出”的原则LIFO即最后被压入栈的变量最先被弹出。 栈区的大小通常有限过多的函数调用可能会导致栈溢出。 栈区的内存是临时的函数返回后栈中的局部变量会被销毁。 简单来说 代码区存储程序的代码通常是只读的。全局区存储全局变量和静态变量。堆区用于动态分配内存由程序员手动管理。栈区存储局部变量和函数调用的相关信息由操作系统自动管理。 3. C语言各数据类型的取值范围
关键字位数表示范围stdint关键字ST关键字char8-128 ~ 127int8_ts8unsigned char80 ~ 255uint8_tu8short16-32768 ~ 32767int16_ts16unsigned short160 ~ 65535uint16_tu16int32-2147483648 ~ 2147483647int32_ts32unsigned int320 ~ 4294967295uint32_tu32long32-2147483648 ~ 2147483647unsigned long320 ~ 4294967295long long64-(2^64)/2 ~ (2^64)/2-1int64_tunsigned long long640 ~ (2^64)-1uint64_tfloat32-3.4e38 ~ 3.4e38double64-1.7e308 ~ 1.7e308 千题千解·嵌入式工程师八股文详解_时光の尘的博客-CSDN博客