C语言面试题小练——第4天:ifndefdefineendif、头文件的访问位置、const的作用

C语言面试题小练——第4天:ifndefdefineendif、头文件的访问位置、const的作用,第1张

C语言面试题小练——第4天:ifndef/define/endif、头文件的访问位置、const的作用

下面三题下载自网络,据说为某些公司面试真题,拿来练手

1. 头文件中的 ifndef/define/endif 干什么用?

分析:一开始我直接跑题了,把这三个宏定义的功能分别写了出来,但后面看网上的答案,发现题目问的是这三个宏定义一起用时的作用,而且指明了在头文件中。

参考文章——#ifndef, #define, #endif 作用
部分原文:

#ifndef
  它是if not define 的简写,是宏定义的一种,实际上确切的说,这应该是预处理功能三种(宏定义、文件包含、条件编译)中的一种----条件编译。
  在c语言中,对同一个变量或者函数进行多次声明是不会报错的。所以如果h文件里只是进行了声明工作,即使不使用# ifndef宏定义,多个c文件包含同一个h文件也不会报错。
  但是在c++语言中,#ifdef的作用域只是在单个文件中。所以如果h文件里定义了全局变量,即使采用#ifdef宏定义,多个c文件包含同一个h文件还是会出现全局变量重定义的错误。
使用#ifndef可以避免下面这种错误:如果在h文件中定义了全局变量,一个c文件包含同一个h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误;如果加了#ifndef,则不会出现这种错误。

结合该博主的解答,这几个宏定义的作用可以总结为:防止因多次引用头文件造成变量重定义


2. include 和 #include "filename.h"有什么区别

分析:符号的不同影响的是编译器检索头文件路径的优先级,尖括号优先标准库路径,双引号优先工作路径。
答案:
对于#include,编译器先从标准库路径开始搜索filename.h,使得系统文件调用比较快;
对于#include"filename.h",编译器先从用户的工作路径开始搜索filename.h,后去寻找系统路径,使得自定义文件较快。

参考文章——#include 和 #include"filename.h"有什么区别


3. const有什么用途?(请至少说明两种)

分析:我只能想到一种——声明变量为只读

答案:(仅供参考)

  1. 用做普通变量的只读属性的别名。通常这个别名只能获得这个变量的值,而不能改变这个变量的值。
  2. 用于函数的形参。常引用做形参,可以确保在函数内不会改变实参的值,所以参数传递时尽量使用常引用类型。

简化:

  1. 修饰一个普通变量使其属性变为只读。
  2. 修饰函数形参,保护实参不被修改。

参考文章——const有哪些作用

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5432747.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存