【C/C++】引号和尖括号的区别|默认include路径配置|头文件应放些什么|static和extern

目录

 引号和尖括号区别

默认include路径设置

查看添加结果

关于static和extern、头文件的一点总结。

头文件中应该放些什么2


引号和尖括号区别

用尖括号 #include <>:
一般用于包含标准的库头文件,编译器会去系统配置的库环境变量和者用户配置的路径去搜索,而不会在项目的当前目录去查找
用双引号 #include "":
一般用于包含用户自己编写的头文件,编译器会先在项目的当前目录查找,找不到后才会去系统配置的库环境变量和用户配置的路径去搜索

一、引用的头文件不同

#include< >引用的是编译器的类库路径里面的头文件。

#include“ ”引用的是你程序目录的相对路径中的头文件。

二、用法不同

#include< >用来包含标准头文件(例如stdio.hstdlib.h).

#include“ ”用来包含非标准头文件。

三、调用文件的顺序不同

#include< >编译程序会先到标准函数库中调用文件。

#include“ ”编译程序会先从当前目录中调用文件。

四、预处理程序的指示不同

#include< >指示预处理程序到预定义的缺省路径下寻找文件。

#include“ ”指示预处理程序先到当前目录下寻找文件,再到预定义的缺省路径下寻找文件。  

参考:#include中尖括号和双引号的区别_路人王_Zz的博客-CSDN博客_include引号和尖括号的区别

默认include路径设置

除了默认的/usr/include, /usr/local/include等include路径外,还可以通过设置环境变量来添加系统include的路径:

# C
export C_INCLUDE_PATH=XXXX:$C_INCLUDE_PATH
# CPP
export CPLUS_INCLUDE_PATH=XXX:$CPLUS_INCLUDE_PATH

以上修改可以直接命令行输入(临时),也可以写入文件:写入/etc/profile中(对所有用户生效),也可以在用户home目录下的.bashrc或.bash_profile中添加(针对某个用户生效),修改完后重新登录shell即生效。

查看添加结果

对于C

echo | gcc -v -x c -E -

对于C++

echo | g++ -v -x c++ -E -  或者  echo | gcc -v -x c++ -E -

修改gcc/g++默认include路径_weixin_34337265的博客-CSDN博客

其他:

2011关于static和extern、头文件的一点总结。

关于static和extern、头文件的一点总结。 【转】

今天写了一个测试程序。突然想起了几个问题。特地测试了一下:

主程序为testemail.c

        #include<stdio.h>

      2 #include<stdlib.h>

      3 #include<string.h>

      4 #include "system.h"

      5 

      6 

      7 int main(int argc,char ** argv)

      8 {

      9          int ret;

     10         NET_EMAIL  getmail ;

     11         NET_EMAIL * pgetmail = &getmail;

     12         strcpy(pgetmail->SendAddr,"root@localhost.localdo");

     13         strcpy(pgetmail->Sendername,"");

     14         strcpy(pgetmail->Title,"meinv");

     15         strcpy(pgetmail->Recievers,"intermilan@yeah.net,mm@yer.cn,4393@qq.com");

     16         strcpy(pgetmail->path,"/var/log/messages");

     17         SendEmail(pgetmail);

     18         print();

     19 }

头文件为system.h

里面声明了NET_EMAIL这种结构体。也声明了SendEmail和print这两个函数。

被测试程序为system.c里面实现了SendEmail和print

测试结果如下:

1.即使不在system里声明函数SendEmail和print,只要system.c和testemail在同一个目录下。

总是能够编译通过并且可以成功运行。-------这说明函数默认的性质为extern的。

2.当system.c里声明两个函数关键字为static的时候,编译就会报错。可见static的作用是限制函数

只能在该文件内被引用。

那么问题出现了。这样的话,某种意义上来说头文件有什么用呢?

经过查找资料和测试如下

1.很多商业代码不会提供给客户源码。比如这个system.c在真正用的时候,可能会编译成system.o的形式提供给客户,

给其它的程序开发人员来调用。这样的话,如果没有system.h,其它的程序员怎么知道有SendEmail这个函数,即便

知道,怎么精确的知道用法和参数?所以这个时候头文件就起到了说明书的作用了。

2.测试当system.h里没有SendEmail的时候,即便在testemail.c里调用SendEmail的时候,给它一个不合法的参数,发

现编译仍然可以通过,但是真正运行的时候就出现了段错误。这样的话会给排除BUG带来困难。因此这个时候头文件

起到了类型安全检查的作用。

所以可以有以下的总结:

1.所谓源文件就是单个.c文件。所谓工程就是同一个目录下的所有文件。

2.不想让其它.c文件访问的函数一定要加上static关键字。其他的函数虽然不在头文件里声明也可以被访问到,但是为了

类型安全检查我们也要最好在头文件里声明。写头文件就像写说明书一样。要养成好的编程风格

2011头文件中应该放些什么2

头文件中应该放些什么2
作者:佚名  来源:不详  录入:Admin  更新时间:2008-8-17 19:38:48  点击数:3
【字体: 】
作为一般规则, 应该把这些东西放入头 (.h) 文件中:
  • 宏定义 (预处理 #defines)
  • 结构、联合和枚举声明
  • typedef 声明
  • 外部函数声明
  • 全局变量声明

当声明或宏定义需要在多个文件中共享时, 尤其需要把它们放入头文件中。特别是, 永远不要把外部函数原型(即外部函数声明)放到 .c 文件中。

另一方面, 如果宏定义或声明为一个 .c 文件私有, 则最好留在 .c 文件中。

头文件中应该放些什么2
作者:佚名  来源:不详  录入:Admin  更新时间:2008-8-17 19:38:48  点击数:3
【字体: 】
作为一般规则, 应该把这些东西放入头 (.h) 文件中:
  • 宏定义 (预处理 #defines)
  • 结构、联合和枚举声明
  • typedef 声明
  • 外部函数声明
  • 全局变量声明

当声明或宏定义需要在多个文件中共享时, 尤其需要把它们放入头文件中。特别是, 永远不要把外部函数原型(即外部函数声明)放到 .c 文件中。

另一方面, 如果宏定义或声明为一个 .c 文件私有, 则最好留在 .c 文件中。

头文件中应该放些什么2
作者:佚名  来源:不详  录入:Admin  更新时间:2008-8-17 19:38:48  点击数:3 
【字体:     】
 
 
作为一般规则, 应该把这些东西放入头 (.h) 文件中:
宏定义 (预处理 #defines)
结构、联合和枚举声明
typedef 声明
外部函数声明
全局变量声明
当声明或宏定义需要在多个文件中共享时, 尤其需要把它们放入头文件中。特别是, 永远不要把外部函数原型(即外部函数声明)放到 .c 文件中。

另一方面, 如果宏定义或声明为一个 .c 文件私有, 则最好留在 .c 文件中。
 

 

posted on 2022-10-04 01:31  bdy  阅读(318)  评论(0编辑  收藏  举报

导航