C高级编程 第十一天(宏 条件编译 静态库 动态库)

2024-08-29 07:36

本文主要是介绍C高级编程 第十一天(宏 条件编译 静态库 动态库),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.预处理指令

#include< >和#include" "的区别:

2.宏函数

3.特殊宏

4.条件编译

5.静态库优缺点

6.动态库


1.预处理指令

#include< >和#include" "的区别:

  • < >系统定义头文件
  • “  ”自定义头文件

2.宏函数

#define SUM(x,y) ((x)+(y))void test()
{int ret=SUM(10,20);
}

注意:

  • 宏的名字中不能有空格
  • 要用括号,扩住每个参数,和宏的整体定义
  • 大写字母表示宏的函数名

3.特殊宏

  1. 宏所在文件         _FILE_
  2. 宏所在行号         _LINE_
  3. 日期        _DATE_
  4. 时间        _TIME_

4.条件编译

//测试存在
#ifdef 标识符程序段1
#else程序段2
#endif // 标识符//测试不存在
#ifndef 标识符程序段1
#else程序段2
#endif // 标识符

作用:防止头文件被重复包含引用,例如

//宏定义不存在的时候再define
#ifdef FILE_H
#define FILE_H
程序
#endif

5.静态库优缺点:

  1. 对函数的链接是在编译完成的,在链接时,静态库被复制到程序中;
  2. 程序运行时和函数库没有关系,移植方便;
  3. 所有相关的文件与库函数被链接合成一个可执行文件,浪费空间和资源。

静态库函数测试:

  1. 创建测试项目
  2. 将lib库文件和头文件放入项目下
  3. 添加现有项,即include对应的头文件
  4. 使用库函数

6.动态库

把链接过程推迟到了运行时。

_declspec(dllexport)int mySub(int a,int b);

导出函数需要特殊声明,会生成一个.lib和.dll文件。 

注意:

  1. _declspec(dllexport)意味着导出函数,导出函数可以被其他模块调用,不加这个,默认内部函数,内部函数在定义他们的dll程序内部使用
  2. 静态库的.lib包含函数的声明实现,动态库的.lib只有声明,实现在.dll中

动态库函数测试:

  1. 创建测试项目
  2. 将.lib .dll和头文件放入项目下,添加现有项,即include对应的头文件(或者#pragma comment(lib,"./动态库名称.lib")
  3. 使用库函数

这篇关于C高级编程 第十一天(宏 条件编译 静态库 动态库)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117245

相关文章

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL