预处理指令
被考次数: 6次
被考频率: 中频率
答错率:    27%
知识难度:
考试要求: 掌握     
知识路径:  > 嵌入式系统软件基础知识  > 嵌入式系统程序设计  > 嵌入式程序设计语言  > 嵌入式C/C++程序设计要求  > C程序设计基础  > C程序基础


本知识点历年真题试卷分布
>> 试题列表    
 

 
       在C程序中以#开头的行被称为预处理指令,这些指令是ANSI C统一规定的。编程时可使用预处理命令来扩展C语言的表示能力,提高编程效率。对C源程序进行编译之前,首先由预处理器对程序中的预处理指令进行处理。
       文件包含#include、宏定义#define、条件编译#ifdef、#ifndef是常用的预处理命令,在头文件assert.h中定义宏assert(断言),用于测试表达式的值,若表达式的值为0,则显示错误信息并终止程序的运行。
       宏定义
       在C程序中用好宏定义可以提高程序的可移植性、可读性,减少出错。对于嵌入式系统而言,为了达到性能要求,也常用宏作为一种代替函数的方法。例如,用宏求解两个数据对象的较小者。
       
       再如,用#define声明一个常数,忽略闰年情况下表示一年有多少秒。
       
       通过使用预定义宏可以返回程序的某些状态,以方便交叉编译和调试,每个预定义宏的名称一两个下画线字符开头和结尾,这些预定义宏不能被取消定义(#undef)或由编程人员重新定义。例如,用_FUNC_打印函数名、_LINE_打印行号,以定位程序中打印该信息的函数和位置。常用的几个预定义宏如下。
       _DATE_当前源文件的编译日期,格式为“Mmm dd yyyy”的字符串字面量
       _TIME_当前源文件的编译时间,格式为“hh:mm:ss”的字符串字面量
       _FILE_当前源文件名称,含路径信息
       _FUNC_当前函数名称
       _LINE_当前程序行的行号,表示为十进制整型常量
       _STDC_若当前编译器符合ISO标准,那么该宏的值为1,否则未定义
       _STDC_HOSTED_(C99)如果当前是宿主系统,则该宏的值为1,否则为0
       条件编译
       编写嵌入式应用程序时经常会遇到一种情况,当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句,这时就需要使用条件编译。条件编译命令最常见的形式为:
       
       其作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2,其中#else部分也可以没有。
       在所有的预处理指令中,#pragma最为复杂,其作用是设定编译器的状态或者是指示编译器完成一些特定的动作,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。#pragma pack有多种形式,#pragma pack(n)表示变量以n字节对齐。
       在网络程序中采用#pragma pack(1)(即变量紧缩),可以减少网络流量以及兼容各种系统,避免由于系统对齐方式不同而导致的解包错误。
 

更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2025 All Rights Reserved
软考在线版权所有