c预处理和宏
文件的预处理
#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预处理和宏的更多相关文章
- Linux C编程学习之C语言简介---预处理、宏、文件包含……
C的简介 C语言的结构极其紧凑,C语言是一种模块化的编程语言,整个程序可以分割为几个相对独立的功能模块,模块之间的相互调用和数据传递是非常方便的 C语言的表达能力十分强大.C语言兼顾了高级语言和汇编语 ...
- define预处理以及宏定义
define的定义方式 无参一般形式:#define 标认符 字符串 比如:#define COUTD "%d\n" 带参一般形式:#def ...
- c 预处理的宏定义
概念 以“#”号开头的都是预处理命令 例如 #include <stdio.h>宏定义 宏定义无参数的宏名后不带参数# 表示这是一条预处理命令, define 为宏定义命令.“标识符”为所 ...
- 标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用
预处理:也就是包括须要的头文件,用#include<标准头文件>或#include "自己定义的头文件" 宏定义,如:#define PI 3.1415926 查看用宏 ...
- 09.C语言:预处理(宏定义)、字节序、地址对齐
一.预处理 预处理 gcc -E Hello.c -o hello.i 编译 gcc -S hello.i -o hello.s 汇编 gcc -c hello.s -o hello.o 链接 gcc ...
- C预处理之宏定义
#include <stdio.h> //定义不带参数的宏 #define PI 3.14 /*********************************************** ...
- C++面试常见问题——01预处理与宏定义
C++面试常见问题--------01预编译和宏的使用 C++预处理器 预处理器是一些指令,它将指示编译器在实际编译之前需要完成的预处理.预处理必须要在对程序进行词法与语义分析.代码生成与优化等通常的 ...
- C语言预处理理论-宏定义2
宏定义21.带参宏和带参函数的区别(1)宏定义是在预处理期间处理的,而函数是在编译期间处理的.这个区别带来的实质差异是:宏定义最终是在调用宏的地方把宏体原地展开,而函数是在调用函数处跳转到函数中去执行 ...
- C语言预处理理论-宏定义1
宏定义1宏定义的规则和使用解析(1)宏定义的解析规则就是:在预处理阶段由预处理器进行替换,这个替换是原封不动的替换.(2)宏定义替换会递归进行,直到替换出来的值本身不再是一个宏为止.#define M ...
随机推荐
- DWVA-XSS部分练手闯关
前言 关于XSS基础内容请查看:https://www.cnblogs.com/xhds/p/12239527.html 实验平台采用DWVA v1.10 XSS(Reflected)反射性XSS漏 ...
- python-基础入门-6快速入门总结
快速入门 程序输出: 1.print语句,字符串用双引号括起来 _在解释器中表示最后一个表达式的值. print语句 与字符串格式(%)结合使用,能实现字符串替换功能. >>>pri ...
- spring框架:(一) 技术说明(技术介绍,技术优势以及发展史等)
一.技术说明(技术介绍,技术优势以及发展史等) 1.1.什么是spring 1.2.spring由来(发展历程) 1.3.spring核心 1.4.spring优点 1.5.spring体系结构 1. ...
- python接口测试2-开发WEB接口
首先要安装flask包: pip install flask 开发一个简单的API接口 # 1. 导入包 from flask import Flask, request # 2. 实例化一个 app ...
- JavaSE 学习笔记01丨开发前言与环境搭建、基础语法
本蒟蒻学习过C/C++的语法,故在学习Java的过程中,会关注于C++与Java的区别.开发前言部分,看了苏星河教程中的操作步骤.而后,主要阅读了<Java核心技术 卷1 基础知识>(第8 ...
- 听说高手都用记事本写C语言代码?那你知道怎么编译运行吗?
坊间传闻高手都喜欢用记事本写代码,那么问题来了,我们以C语言为例,如何用记事本编译运行呢?其实最简单的方式就是安装GCC编译器,在记事本编写C语言程序,然后再在命令行用GCC编译运行,下面我简单介绍一 ...
- 树莓派4b 安装最新wiringpi库
树莓派4自带的wiringPi库默认是2.50,无法映射到gpio,所以需要更新到2.52才能与树莓派映射: 1. 安装自带的wiringPi库 $ Sudo apt-get install wiri ...
- 使用acme.sh从Let's Encrypt申请SSL证书
Let's Encrypt 简介 Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为 ...
- Kubernetes Ingress-nginx使用
目录 简介 1. 部署Ingress-Controller 2. 使用Ingress规则 2.1 Ingress地址重写 2.2 配置HTTPS 2.3 黑白名单配置 2.4 匹配请求头 2.5 速率 ...
- 「懒惰的美德」我用 python 写了个自动生成给文档生成索引的脚本
我用 python 写了一个自动生成索引的脚本 简介:为了刷算法题,建了一个 GitHub仓库:PiperLiu / ACMOI_Journey,记录自己的刷题轨迹,并总结一下方法.心得.想到一个需求 ...