unix高级环境编程---GNU

预处理指令

#include // 将指定文件的内容插至此指令处
#include_next // 与#include一样,但从当前目录之后的目录查找,极少用
#define // 定义宏
#undef // 删除宏
#if // 判定
#ifdef // 判定宏是否已定义
#ifndef // 判定宏是否未定义
#else // 与#if、#ifdef、#ifndef结合使用
#elif // else if多选分支
#endif // 结束判定
## // 连接宏内两个连续的字符串
# // 将宏参数扩展成字符串字面值
#error // 产生错误,结束预处理
#warning // 产生警告
#pragma // 提供额外信息的标准方法,可用于指定平台
#pragma GCC dependency <文件> // 若<文件>比此文件新则产生警告
#pragma GCC poison <标识> // 若出现<标识>则产生错误
#pragma pack(1/2/4/8) // 按1/2/4/8字节对齐补齐
#line // 指定行号

预定义宏

一般预定义宏用来写日志文件用 或者找错的时候
BASE_FILE // 正在编译的源文件名
FILE // 所在文件名
LINE // 行号
FUNCTION // 函数名
func // 同__FUNCTION__
DATE // 日期
TIME // 时间
INCLUDE_LEVEL // 包含层数,从0开始
__cplusplus // C++编译器将其定义为1,
// C编译器不定义该宏
在这里插入图片描述

#ifndef _PRINT_H
#define _PRINT_H

#include <stdio.h>

void print (void) 
{
    printf ("__BASE_FILE__     : %s\n", __BASE_FILE__);
    printf ("__FILE__          : %s\n", __FILE__);
    printf ("__LINE__          : %d\n", __LINE__);
    printf ("__FUNCTION__      : %s\n", __FUNCTION__);
    printf ("__func__          : %s\n", __func__);
    printf ("__DATE__          : %s\n", __DATE__);
    printf ("__TIME__          : %s\n", __TIME__);
    printf ("__INCLUDE_LEVEL__ : %d\n", __INCLUDE_LEVEL__);
#ifdef __cplusplus
    printf ("__cplusplus       : %d\n", __cplusplus);
#endif // __cplusplus
}

#endif // _PRINT_H

#ifndef _PREDEF_H
#define _PREDEF_H

#include "print.h"

#endif//_PREDEF_H

#include "predef.h"

int main (void) 
{
    print ();
    return 0;
}

环境变量

C_INCLUDE_PATH     - C头文件的附加搜索路径,相当于gcc的-I选项
CPATH              - 同C_INCLUDE_PATH
CPLUS_INCLUDE_PATH - C++头文件的附加搜索路径
LIBRARY_PATH       - 链接时查找静态库/共享库的路径
LD_LIBRARY_PATH    - 运行时查找共享库的路径

通过gcc的-I选项指定C/C++头文件的附加搜索路径:

1.# gcc calc.c cpath.c -I.

将当前目录作为C头文件附加搜索路径,添加到CPATH环境变量中:
# export CPATH=$CPATH:. // export保证当前shell的,子进程继承此环境变量
# echo $CPATH
# env | grep CPATH

也可以在~/.bashrc 或~/.bash_profile,配置文件中写环境变量,持久有效:

export CPATH=$CPATH:.
执行
# source ~/.bashrc 或 # source ~/.bash_profile
//生效,以后每次登录自动生效。

头文件的三种定位方式:

  1. #include “目录/xxx.h” - 头文件路径发生变化,需要修改源程序
  2. C_INCLUDE_PATH/CPATH=目录 - 同时构建多个工程,可能引发冲突
  3. gcc -I目录 - 既不用改程序,也不会有冲突
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HOVL_C++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值