多数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. C# 实现OrderBy按多个字段排序

    //倒序 list.OrderByDescending(i => i.a).ThenByDescending(i => i.b); //顺序 list.OrderBy(i => i. ...

  2. django中自定义表名及字段名称

    在meta 类中指定表名,在字段中通过db_column指定列名如下所示 class Record(models.Model): content=models.CharField(max_length ...

  3. ubuntu系统没有声音解决方法

    好像装了个放视频的软件,就没有声音了.后面网上搜到了一个简单粗暴的办法,效果很明显,改变权限后直接就有声音了. -------------------------------------------- ...

  4. Spring课程 Spring入门篇 4-8 Spring bean装配之基于java的容器注解说明--基于泛型的自动装配

    1 解析 1.1 什么是泛型? 1.2 泛型有什么作用? 1.3 泛型装配样式? 2 代码演练 2.1 泛型应用 1 解析 1.1 什么是泛型? Java泛型设计原则:只要在编译时期没有出现警告,那么 ...

  5. Node中使用mysql模块遇到的问题

    Node的mysql模块,本人的感受就是不好用,各种报错,各种坑,有一个问题困扰了我很久,也不知道是不是我使用的方式不对,不过后来用easymysql模块解决了,我才深信这是一个坑. 问题描述: 假设 ...

  6. 深入理解读写锁—ReadWriteLock源码分析

    转载:https://blog.csdn.net/qq_19431333/article/details/70568478 ReadWriteLock管理一组锁,一个是只读的锁,一个是写锁.读锁可以在 ...

  7. 集合之equals与hashCode方法

    一  equals equals方法是Object级的,默认对比两个对象的内存地址,很多类都重写了该方法,对比对象的实际内容,一般对比同一类对象相同属性的属性值是否相同. 二 hashCode 1.哈 ...

  8. Java入门到精通——调错篇之Spring2.5使用AOP时报错only available on JDK 1.5 and higher

    一.问题描述及原因. 在Spring2.5Aop例子中的时候会出现一个错误only available on JDK 1.5 and higher,大概意思就是需要JDK1.5甚至更高版本.但是我用的 ...

  9. php基础--取默认值以及类的继承

    (1)对于php的默认值的使用和C++有点类似,都是在函数的输入中填写默认值,以下是php方法中对于默认值的应用: <?phpfunction makecoffee($types = array ...

  10. Hadoop ->> Hadoop是什么?

    Hadoop是什么? 1)Hadoop是一个分布式计算平台,程序员可以在不需要知道底层结构的情况下实现集群并行运算: 2)Hadoop不只是一个软件或者系统,它代表的是一个生态圈,一个做大数据分析计算 ...