`
yangyou230
  • 浏览: 1683502 次
文章分类
社区版块
存档分类

#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)。

 
阅读更多

#define SECOND_PER_YEAR (60 * 60 * 24 * 365)UL

具体分析如下:

1、基本语法。不能以分号结束,括号的使用。

2、预处理器将为你计算常数表达式的值,因此,直接写出是如何计算出一年中有多少秒而不是计算出实际的值,是更清晰没有代价的。

3、这二个表达式将会是16位机的整型数溢出,因此要用长整型符号L,告诉编译器这个常数是长整型数。

含参数的宏与函数的优缺点如下:

1.函数调用时,先求出实参表达式的值,然后带入形参。而使用带参的宏只是进行简单的字符替换。

2.函数调用是在程序运行时处理的,分配临时的内存单元;而宏展开则是在编译时进行的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。

3.对函数中的实参和形参都要定义类型,二者的类型要求一致,如不一致,应进行类型转换;而宏不存在类型问题,宏名无类型,它的参数也无类型,只是一个符号代表,展开时带入指定的字符即可。宏定义时,字符串可以是任何类型的数据。

4.调用函数只可得到一个返回值,而用宏可以设法得到几个结果。

5.使用宏次数多时,宏展开后源程序长,因为每展开一次都使程序增长,而函数调用不使源程序变长。

6.宏替换不占运行时间。而函数调用则占运行时间(分配单元、保留现场、值传递、返回)。

7、参数每次用于宏定义时,他们都将重新求值,由于多次求值,具有副作用的参数可能会产生不可预料的结果。而参数在函数被调用前只求值一次,在函数中多次使用参数并不会导致多种求值过程,参数的副作用并不会造成任何特殊的问题。

一般来说,用宏来代表简短的表达式比较合适。

分享到:
评论

相关推荐

    计算机研究生复试面试题

    用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 2. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?while(1){}或者for...

    与c有关的常用面试问题

    用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)  #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL    我在这想看到几件事情: ; #define 语法的基本知识(例如:不能以分号结束,...

    嵌入式程序员应知道.pdf

    **问题1:用预处理指令#define声明一个常数,以表明一年中有多少秒(忽略闰年问题)** 解决方案: ```c #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL ``` **解析**:此题考察了对`#define`语法的基本理解、预...

    嵌入式软件开发常见面试题.doc

    1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) 在 C 语言中,我们可以使用预处理指令#define 来声明一个常数。例如,下面是一个声明常数 SECONDS_PER_YEAR 的示例代码: ```c #...

    C51初学者的面试题或者叫必须掌握的知识

    1. 用预处理指令 #define 声明一个常数,用以表明 1 年中有多少秒(忽略闰年问题)。 在这个问题中,我们可以了解到预处理指令的基本知识,例如不能以分号结束,括号的使用等等。此外,我们还可以了解到预处理器将...

    计算机专业复试面试经典问题含答案.pdf

    例如,声明一个常数 SECONDS_PER_YEAR,表示1年中有多少秒(忽略闰年问题)。`#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL` 2. 嵌入式系统中无限循环的实现 在嵌入式系统中,经常需要使用无限循环。可以使用...

    嵌入式C笔试题12.pdf

    定义一个常数,用以表明1年中有多少秒(忽略闰年问题),例如: #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 这个定义中,使用了UL表示无符号长整型数,以避免16位机的整型数溢出。 写一个 "标准" 宏 MIN,...

    研究生计算机专业复试面试题

    例如,使用#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL可以声明一个常数,表示1年中有多少秒(忽略闰年问题)。预处理指令#define可以在编译前对代码进行修改,从而提高代码的效率和可读性。 2. 嵌入式系统中...

    IT公司c语言面试题

    使用预处理指令`#define`声明一个常数,以表明一年中有多少秒(忽略闰年问题)。示例代码如下: ```c #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL ``` **考察点:** - `#define`语法的基本知识,例如...

    C语言测试:嵌入式程序员必须知道的16个问题

    在C语言中,`#define`用于声明常量,例如定义一年有多少秒(忽略闰年)。正确做法是: ```c #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL ``` 此题考察的知识点包括: - `#define`的基本语法(无需分号结尾...

    计算机专业面试题及答案

    预处理指令#define可以用来声明一个常数,在这个例子中,我们使用#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL来声明一个常数,表示一年中有多少秒(忽略闰年问题)。 接下来,我们讨论了死循环的实现方式。在...

    C和C++面试题(有各种分类题型)

    - **题目**: 使用预处理指令`#define`声明一个常数,用以表示1年中有多少秒(忽略闰年问题)。 ```c #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL ``` - **考查目的**: 1. **`#define`语法基本知识**: ...

    C语言经典问题罗列

    - **问题描述**:使用预处理指令`#define`声明一个常数,用来表示一年中有多少秒,忽略闰年的情况。 - **解决方案**: ```c #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL ``` - **解释**: - `#define`是...

    嵌入式C编程面试题.pdf

    使用预处理指令 `#define` 声明一个常数,用以表明一年中有多少秒(忽略闰年问题) ```c #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL ``` **知识点分析**: - **基本语法**:`#define` 是预处理器指令,...

    华为c++面试题

    - **题目描述**:使用预处理指令`#define`声明一个常数,用来表示一年中有多少秒(忽略闰年问题)。 - **示例代码**: ```c++ #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL ``` - **解析**: - **`#...

    C_C++面试题大汇总

    - **题目描述**:“用预处理指令`#define`声明一个常数,用以表明1年中有多少秒(忽略闰年问题)” - **解析**: - `#define`用于定义宏,它不支持类型检查,因此在定义常量时,需要注意数值范围的问题。 - 使用宏...

Global site tag (gtag.js) - Google Analytics