【C/C++】引号和尖括号的区别|默认include路径配置|头文件应放些什么|static和extern
目录
引号和尖括号区别
用尖括号 #include <>:
一般用于包含标准的库头文件,编译器会去系统配置的库环境变量和者用户配置的路径去搜索,而不会在项目的当前目录去查找
用双引号 #include "":
一般用于包含用户自己编写的头文件,编译器会先在项目的当前目录查找,找不到后才会去系统配置的库环境变量和用户配置的路径去搜索
一、引用的头文件不同
#include< >引用的是编译器的类库路径里面的头文件。
#include“ ”引用的是你程序目录的相对路径中的头文件。
二、用法不同
#include< >用来包含标准头文件(例如stdio.h或stdlib.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 | ||||
【字体: 】 | ||||
|
头文件中应该放些什么2 | ||||
作者:佚名 来源:不详 录入:Admin 更新时间:2008-8-17 19:38:48 点击数:3 | ||||
【字体: 】 | ||||
|
头文件中应该放些什么2
作者:佚名 来源:不详 录入:Admin 更新时间:2008-8-17 19:38:48 点击数:3
【字体: 】
作为一般规则, 应该把这些东西放入头 (.h) 文件中:
宏定义 (预处理 #defines)
结构、联合和枚举声明
typedef 声明
外部函数声明
全局变量声明
当声明或宏定义需要在多个文件中共享时, 尤其需要把它们放入头文件中。特别是, 永远不要把外部函数原型(即外部函数声明)放到 .c 文件中。
另一方面, 如果宏定义或声明为一个 .c 文件私有, 则最好留在 .c 文件中。