文件的预处理

#include "xxx.h"

1 首先查找当前源文件所在的路径

2 查找工程的头文件搜索路径

#include <xxxx.h>

查找工程的头文件搜索路径

如果想要自己编写的头文件加入搜索路径之中,就需要在CMakeLists 添加

include_directories("xxx(文件夹)")

还需要添加 实现的.c文件 以及文件的路径目录。

比如说自己写了一个



编译器不知道你写了一个factorial.c这个文件,因此需要把文件路径添加进去,让其编译。

add_executable(c_pra_1 main.c src/factorial.c)

头文件用来导出函数模型,源文件用来实现函数

宏函数

宏函数是直接原封不动地替换,和函数调用不相同,并没有先后计算的说法。因此传入的参数一定要是没有副作用的才可以。

#define MAX(a,b) (a)>(b) ? (a):(b)

define IS_HEX_CHARACRER(ch) \

((ch)>='0' && (ch)<='9')||

((ch)>='A' && (ch)<='F')||

((ch)>='a' && (ch)<='f')

宏的定义,返回值参数是没有类型的概念

条件编译

1 #ifdef 如果定义

2 #ifndef 如果没有定义

3 #if 如果。。

endif

如果不想在代码中定义宏,就可以直接在CMakeLists文件中定义,比如说,想要定义#define DEBUG,即可在文件中添加下面一行

target_compile_definitions(${name} PUBLIC DEBUG)

判断c++平台等

#ifdef __cplusplus
extern "C"{
#endif 中间可以填写其他函数
int ADD(int left,int right); #ifdef __cplusplus
};
#endif

重现PRINTF

使用宏定义 #define PRINTLNF(format,...)printf(format"\n",##VA_ARGS)

传递参数#define PRINT_INT(value)PRINTLNF(#value":%d",value)

使用一些行号列号#define PRINTLNF(format,...)printf("("FILE":%d) %s:"format"\n",LINE,FUNCTION,##VA_ARGS)

c预处理和宏的更多相关文章

  1. Linux C编程学习之C语言简介---预处理、宏、文件包含……

    C的简介 C语言的结构极其紧凑,C语言是一种模块化的编程语言,整个程序可以分割为几个相对独立的功能模块,模块之间的相互调用和数据传递是非常方便的 C语言的表达能力十分强大.C语言兼顾了高级语言和汇编语 ...

  2. define预处理以及宏定义

    define的定义方式 无参一般形式:#define 标认符 字符串                     比如:#define COUTD "%d\n" 带参一般形式:#def ...

  3. c 预处理的宏定义

    概念 以“#”号开头的都是预处理命令 例如 #include <stdio.h>宏定义 宏定义无参数的宏名后不带参数# 表示这是一条预处理命令, define 为宏定义命令.“标识符”为所 ...

  4. 标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用

    预处理:也就是包括须要的头文件,用#include<标准头文件>或#include "自己定义的头文件" 宏定义,如:#define PI 3.1415926 查看用宏 ...

  5. 09.C语言:预处理(宏定义)、字节序、地址对齐

    一.预处理 预处理 gcc -E Hello.c -o hello.i 编译 gcc -S hello.i -o hello.s 汇编 gcc -c hello.s -o hello.o 链接 gcc ...

  6. C预处理之宏定义

    #include <stdio.h> //定义不带参数的宏 #define PI 3.14 /*********************************************** ...

  7. C++面试常见问题——01预处理与宏定义

    C++面试常见问题--------01预编译和宏的使用 C++预处理器 预处理器是一些指令,它将指示编译器在实际编译之前需要完成的预处理.预处理必须要在对程序进行词法与语义分析.代码生成与优化等通常的 ...

  8. C语言预处理理论-宏定义2

    宏定义21.带参宏和带参函数的区别(1)宏定义是在预处理期间处理的,而函数是在编译期间处理的.这个区别带来的实质差异是:宏定义最终是在调用宏的地方把宏体原地展开,而函数是在调用函数处跳转到函数中去执行 ...

  9. C语言预处理理论-宏定义1

    宏定义1宏定义的规则和使用解析(1)宏定义的解析规则就是:在预处理阶段由预处理器进行替换,这个替换是原封不动的替换.(2)宏定义替换会递归进行,直到替换出来的值本身不再是一个宏为止.#define M ...

随机推荐

  1. DWVA-XSS部分练手闯关

    前言 关于XSS基础内容请查看:https://www.cnblogs.com/xhds/p/12239527.html 实验平台采用DWVA  v1.10 XSS(Reflected)反射性XSS漏 ...

  2. python-基础入门-6快速入门总结

    快速入门 程序输出: 1.print语句,字符串用双引号括起来 _在解释器中表示最后一个表达式的值. print语句 与字符串格式(%)结合使用,能实现字符串替换功能. >>>pri ...

  3. spring框架:(一) 技术说明(技术介绍,技术优势以及发展史等)

    一.技术说明(技术介绍,技术优势以及发展史等) 1.1.什么是spring 1.2.spring由来(发展历程) 1.3.spring核心 1.4.spring优点 1.5.spring体系结构 1. ...

  4. python接口测试2-开发WEB接口

    首先要安装flask包: pip install flask 开发一个简单的API接口 # 1. 导入包 from flask import Flask, request # 2. 实例化一个 app ...

  5. JavaSE 学习笔记01丨开发前言与环境搭建、基础语法

    本蒟蒻学习过C/C++的语法,故在学习Java的过程中,会关注于C++与Java的区别.开发前言部分,看了苏星河教程中的操作步骤.而后,主要阅读了<Java核心技术 卷1 基础知识>(第8 ...

  6. 听说高手都用记事本写C语言代码?那你知道怎么编译运行吗?

    坊间传闻高手都喜欢用记事本写代码,那么问题来了,我们以C语言为例,如何用记事本编译运行呢?其实最简单的方式就是安装GCC编译器,在记事本编写C语言程序,然后再在命令行用GCC编译运行,下面我简单介绍一 ...

  7. 树莓派4b 安装最新wiringpi库

    树莓派4自带的wiringPi库默认是2.50,无法映射到gpio,所以需要更新到2.52才能与树莓派映射: 1. 安装自带的wiringPi库 $ Sudo apt-get install wiri ...

  8. 使用acme.sh从Let's Encrypt申请SSL证书

    Let's Encrypt 简介 Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为 ...

  9. Kubernetes Ingress-nginx使用

    目录 简介 1. 部署Ingress-Controller 2. 使用Ingress规则 2.1 Ingress地址重写 2.2 配置HTTPS 2.3 黑白名单配置 2.4 匹配请求头 2.5 速率 ...

  10. 「懒惰的美德」我用 python 写了个自动生成给文档生成索引的脚本

    我用 python 写了一个自动生成索引的脚本 简介:为了刷算法题,建了一个 GitHub仓库:PiperLiu / ACMOI_Journey,记录自己的刷题轨迹,并总结一下方法.心得.想到一个需求 ...