多数c语言的初学者对c工程开发过程各个阶段的作用理解不到位,而这方面的的知识又是实际开发过程中经常用到的技能点,所以就成为面试考察中一个重要的考察方面。例如:头文件的作用、头文件的内容;链接的作用和意义;条件编译的作用等等此类问题,接下来将c工程开发过程中的各种问题进行总结使大家能够自如应对这方面的面试题目。
  c工程开发经过以下几个阶段:
  编辑--》预处理--》编译--》汇编--》链接--》运行--》调试

一、编辑阶段
   根据自己需要选择合适的程序编辑器。
   优秀的程序编辑器应该具备功能包括:支持多种编程语言、语法高亮显示、智能提醒、自动补全、自动注释等多种功能。
    vim是一款很优秀的程序编辑器,最大特点:是一款可自由配置和定制编辑器

二、预处理阶段
  主要是包括技术点:文件包含、宏定义和条件编译,该阶段的知识点在工程开发中占有重要的位置,因此成为企业面试重点考察技术点,初学者由于没有工程经验对该阶段的知识点往往不清楚,针对三个知识点进行以下总结:

本节主要讲解“文件包含”的概念和作用。
在编写c语言程序中,文件的开头部分用#include语句包含一个相关的.h文件,该文件究竟有什么作用,文件中内容是什么,多数的初学者由于开发经验不足,对此部分的概念不清楚。接下来针对以上问题进行讨论:
1、文件包含的形式:
#include <xxx.h>
#include "yyy.h"

#include <linux/inet.h>
#include "header/funcs.h"
以下的形式较少采用,采用了绝地路径,使程序不具有可移植性
#include </home/usb/stdusb.h>

文件包含语句的作用:根据名字寻找头文件,用头文件内容替换#include语句,<>和""搜索的位置不一样,
<>包含头文件是编译器默认的头文件搜索路径下寻找,“”包含的头文件是当前目录和
编译器默认的头文件搜索路径。
2、函数调用之前需要声明才能调用
文件a中定义的函数,需要在文件b中使用,则需要在文件b开头部分进行声明
为了在调用函数的过程中方便函数的声明所以进入了头文件
头文件内容:函数的声明和函数所依赖的结构体声明。在调用第三库方函数、系统库函数、项目组中其他人编写的
的函数时,仅需要用#include语句包含指定的头文件即完成了声明。项目开发时要求编写.c文件的同时必须要编
写.h文件,以方便他人使用。

3、头文件的书写格式:
例:
头文件:network.h
#ifndef _NETWORK_H_
#define _NETWORK_H_
头文件内容
#endif
一般格式是这样的:
   #ifndef <标识>
   #define <标识>
  
   ......
   ......
  
   #endif
  
<标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。
标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h
  #ifndef _STDIO_H_
  #define _STDIO_H_
  
  ......
  
  #endif

4、开发过程中经常会遇到预处理过程中因为找不到头文件而终止的情况,如果是IDE就要查询是否头文件已经
导入到了执行目录下,如果用命令行的编译器gcc,则可以在编译的过程中指明头文件的搜索路径,
所用参数-I:指明本次编译头文件搜索路径,如果头文件不在编译器默认搜索路径下,也不在当前目录下。
特别是在使用第三方库的时候,要确保所需要的头文件在正确的位置。

  

    

c/c++面试----c工程开发之头文件的更多相关文章

  1. c c++面试----c工程开发之链接

    多数c语言的初学者对c工程开发过程各个阶段的作用理解不到位,而这方面的的知识又是实际开发过程中经常用到的技能点,所以就成为面试考察中一个重要的考察方面.例如:头文件的作用.头文件的内容:链接的作用和意 ...

  2. c c++面试c工程开发之宏定义和条件编译

    多数c语言的初学者对c工程开发过程各个阶段的作用理解不到位,而这方面的的知识又是实际开发过程中经常用到的技能点,所以就成为面试考察中一个重要的考察方面.例如:头文件的作用.头文件的内容:链接的作用和意 ...

  3. Linux驱动开发常用头文件

    头文件目录中总共有32个.h头文件.其中主目录下有13个,asm子目录中有4个,linux子目录中有10个,sys子目录中有5个.这些头文件各自的功能如下: 1.主目录 <a.out.h> ...

  4. 在工程名.h头文件中写public:

    class CaccessimageApp : public CWinApp { public: _ConnectionPtr m_pConnection; CaccessimageApp(); // ...

  5. Qt工程pro文件的简单配置(尤其是第三方头文件和库)

    Qt开发中,pro文件是对正工程所有源码.编译.资源.目录等的全方位配置的唯一方式,pro文件的编写非常重要,以下对几个重要项进行说明(win和linux,mac平台通用配置) 注释 以”#”开始的行 ...

  6. include包含头文件的语句中,双引号和尖括号的区别

    include包含头文件的语句中,双引号和尖括号的区别   #include <>格式:引用标准库头文件,编译器从标准库目录开始搜索 #incluce ""格式:引用非 ...

  7. 引用其他头文件时出现这种错误,莫名其妙,error C2065: “ColorMatrix”: 未声明的标识符

    今天做项目时,直接拷贝了另一个工程里的头文件和源文件,然后运行时就出现这种问题,莫名其妙,在原程序里运行一点问题就没有,但是在新工程里就是error. >e:\c++\button_fly2\b ...

  8. App开发流程之通用宏定义及头文件

    工欲善其事,必先利其器. 在正式实现各种炫酷的功能和UI前,做好准备工作是提高后续开发效率的必经之路. 所以,这个系列,我不是在各种堆技术,更关注的是“兵马动”之前的“粮草行”,有些繁琐,但当清晰理出 ...

  9. ubuntu下整合eclipse和javah生成jni头文件开发android的native程序

    0:前言: 这两天一直在研究用android的jni调用第三方库,上网搜方法,但是都是泛泛而谈,没有demo,经过我几番折磨,写了n多的helloword工程,总是不成功,工程名字也就由helloow ...

随机推荐

  1. 错误 6 未能找到类型或命名空间名称“BLL”(是否缺少 using 指令或程序集引用?)

    出现这个错误,要确保先引用BLL.dll, 如果引用之后还没有解决这个问题的话,确认一下程序集FrameWork版本与项目FrameWork版本一致.右击程序集属性可以更改.

  2. 【学习笔记】使用SQLyog连接MySQL数据库

    一.使用SQLyog创建数据库用来管理学生信息 #创建数据库student DROP DATABASE IF EXISTS Myschool; CREATE DATABASE Myschool; #在 ...

  3. hdu 3265 矩形剪块面积并

    http://acm.hust.edu.cn/vjudge/problem/10769 给n张海报,在每张海报上剪掉一个矩形,求面积并 把剪块的海报分成四个矩形,就是普通的求面积并问题了 #inclu ...

  4. Avro-RPC client in Flume

    Avro used in Flume Define the interface of RpcClient public interface RpcClient { public int getBatc ...

  5. JSP初学者5

    JSP中include指令和include动作的区别 include指令是编译阶段的指令,即include所包含的文件的内容是编译的时候插入到JSP文件中,  JSP引擎在判断JSP页面未被修改,否则 ...

  6. Qt删除文件夹

    写的软件需要进行文件夹的复制,开始不怎么懂就找了个拷贝文件夹的代码测试了一下,运行程序选择了源目录和目标目录相同进行拷贝,结果悲剧了.因为是递归拷贝,导致文件夹被嵌套N层,软件死机,强制结束后,产生的 ...

  7. Android学习——Fragment与Activity通信(一)

    学会了在Activity中加载Fragment的方法之后,接下来便需要学习Activity和Fragment之间的通信.这一节先学习如何把Activity中的信息传递给Fragment. 基本过程 在 ...

  8. SharePoint Config database Log file too big – reduce it!

    SharePoint Config database logs are one thing to keep an eye on since they do have a tendency to gro ...

  9. raw_input与input的区别

    1. 版本差异 raw_input——>python2版本 input——>python3版本 2. 输入格式差异 就是raw_input()随便输都是字符串,而input()必须按照Py ...

  10. ubuntu 18 环境下使用 @vue-cli 3.2 新建 vue 项目

    ubuntu 18 环境下使用 @vue-cli 3.2 新建 vue 项目 标签(空格分隔): Vue 首先安装全局@vue-cli工具: npm install -g @vue/cli 然后创建项 ...