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

相关文章

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

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

mysql中的group by高级用法详解

《mysql中的groupby高级用法详解》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,本文给大家介绍mysql中的groupby... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

golang实现动态路由的项目实践

《golang实现动态路由的项目实践》本文主要介绍了golang实现动态路由项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习... 目录一、动态路由1.结构体(数据库的定义)2.预加载preload3.添加关联的方法一、动态路由1

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4