linux——网络计算机{序列化及反序列化(JSON)(ifdef的用法)}
linux——网络(服务器的永久不挂——守护进程)-CSDN博客
目录
一、序列化与反序列化
1. 推荐 JSON 库
2. 使用 nlohmann/json 示例
安装方法
基础用法
输出结果
3. 常见操作
4. 其他库对比
5. 选择建议
二、ifdef宏的用法
基本语法
核心用途
进阶用法
注意事项
示例:跨平台日志
一、序列化与反序列化
上篇博客的最后我们介绍序列化与反序列化,这次我们介绍常用的序列化库。
1. 推荐 JSON 库
-
nlohmann/json
现代、易用的头文件库,语法简洁,支持 C++11 及以上。#include <nlohmann/json.hpp> using json = nlohmann::json; // 别名简化 -
RapidJSON
高性能库,适合对速度要求高的场景,但 API 较复杂。 -
JsonCpp
老牌库,功能稳定,但需要编译。
2. 使用 nlohmann/json 示例
安装方法
-
直接包含头文件:下载 json.hpp 到项目目录。
-
包管理器安装(如 vcpkg):
vcpkg install nlohmann-json -
linuxCentOS 7安装JSON -
yum install epel-release
基础用法
#include <iostream>
#include <nlohmann/json.hpp>
using json = nlohmann::json;int main() {// 解析 JSON 字符串json j = json::parse(R"({"name": "Alice", "age": 25, "scores": [90, 85]})");std::string name = j["name"]; // "Alice"int age = j["age"]; // 25// 修改数据j["age"] = 26;j["scores"].push_back(95); // 添加元素// 生成 JSON 字符串std::string json_str = j.dump(4); // 缩进4空格格式化std::cout << json_str << std::endl;return 0;
}
输出结果
{"age": 26,"name": "Alice","scores": [90, 85, 95]
}
3. 常见操作
-
嵌套对象:
json j; j["user"]["id"] = 123; j["user"]["tags"] = {"admin", "developer"}; -
异常处理:
try {json j = json::parse(invalid_json_str); } catch (const json::parse_error& e) {std::cerr << "解析错误: " << e.what() << std::endl; } -
文件读写:
// 从文件读取 std::ifstream file("data.json"); json j; file >> j;// 写入文件 std::ofstream out("output.json"); out << j.dump(4);
4. 其他库对比
| 库 | 优点 | 缺点 |
|---|---|---|
| nlohmann/json | 语法简洁,易用性强 | 性能稍低 |
| RapidJSON | 性能极高,内存占用小 | API 复杂,需手动管理 |
| JsonCpp | 稳定,兼容性好 | 需要编译 |
5. 选择建议
-
快速开发:优先选择
nlohmann/json。 -
高性能场景:使用
RapidJSON。 -
兼容旧项目:考虑
JsonCpp。
二、ifdef宏的用法
基本语法
#ifdef 宏名称// 如果宏已定义,编译此代码
#else// 如果宏未定义,编译此代码(可选)
#endif
核心用途
-
调试代码开关
#define DEBUG // 注释此行以关闭调试信息#ifdef DEBUGstd::cout << "Debug信息: x = " << x << std::endl; #endif -
头文件保护(防止重复包含)
#ifndef MY_HEADER_H #define MY_HEADER_H // 头文件内容 #endif -
跨平台适配
#ifdef _WIN32// Windows专用代码
#elif __linux__// Linux专用代码
#endif
-
功能模块开关
// 编译时添加 -DUSE_FEATURE_A 启用功能 #ifdef USE_FEATURE_A// 功能A的代码 #endif
进阶用法
-
#if defined组合条件
支持逻辑运算符(&&,||,!):#if defined(DEBUG) && (VERSION >= 3)// 当DEBUG已定义且版本≥3时编译 #endif -
#ifndef反向检查
等价于#if !defined:#ifndef RELEASE// 若未定义RELEASE则编译 #endif
注意事项
-
宏定义位置
宏通常在文件顶部定义,或通过编译器选项定义(如g++ -DDEBUG)。 -
作用域
宏定义仅在定义之后有效,且遵循文件作用域。 -
与
#pragma once的区别
#pragma once是编译器特性(非标准),用于替代头文件保护,但#ifndef是标准且跨平台兼容的。 -
预处理指令格式
指令需独占一行,以#开头,不可缩进或混入其他代码。
示例:跨平台日志
#include <iostream>// 编译时定义 -DPRINT_DEBUG 启用调试输出
#ifdef PRINT_DEBUG#define LOG(msg) std::cout << "[LOG] " << msg << std::endl
#else#define LOG(msg)
#endifint main() {LOG("程序启动"); // 若未定义PRINT_DEBUG,此行不编译return 0;
}
通过灵活使用 #ifdef,可以提升代码的可维护性和跨平台兼容性。
三、网络计算机全部全部代码
网络计算机完结 · 8156655 · MFF的库/linux - Gitee.com

相关文章:
linux——网络计算机{序列化及反序列化(JSON)(ifdef的用法)}
linux——网络(服务器的永久不挂——守护进程)-CSDN博客 目录 一、序列化与反序列化 1. 推荐 JSON 库 2. 使用 nlohmann/json 示例 安装方法 基础用法 输出结果 3. 常见操作 4. 其他库对比 5. 选择建议 二、ifdef宏的用法 基本语法 核心用途…...
【教程】docker升级镜像
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 自动升级 手动升级 无论哪种方式,最重要的是一定要通过-v参数做数据的持久化! 自动升级 使用watchtower,可…...
迅为RK3568开发板篇OpenHarmony实操HDF驱动控制LED-编写应用APP
在应用代码中我们实现如下功能: 当应用程序启动后会获取命令行参数。如果命令行没有参数,LED 灯将循环闪烁;如果命令行带有参数,则根据传输的参数控制 LED 灯的开启或关闭。通过 HdfIoServiceBind 绑定 LED灯的 HDF 服务ÿ…...
python代码
python\main_script.py from multiprocessing import Process import subprocessdef call_script(args):# 创建一个新的进程来运行script_to_call.pyprocess Process(targetrun_script, args(args[0], args[1]))process.start()process2 Process(targetrun_script, args(arg…...
React 打印插件 -- react-to-print
一、安装依赖 npm install react-to-print 二、使用 import { useReactToPrint } from "react-to-print"; import React, { useRef, forwardRef } from react;const Content () > {const contentRef useRef(null);const reactToPrintFn useReactToPrint({ c…...
探索C语言简易计算器程序的实现与优化
在C语言编程学习中,实现一个简易计算器是一个常见且有趣的练习项目。它不仅能帮助我们巩固基本的语法知识,如函数、循环、分支结构,还能让我们深入理解程序设计的逻辑。接下来,我们将分析三段实现简易计算器功能的C语言代码&#…...
深入了解 MySQL:从基础到高级特性
引言 在当今数字化时代,数据的存储和管理至关重要。MySQL 作为一款广泛使用的开源关系型数据库管理系统(RDBMS),凭借其高性能、可靠性和易用性,成为众多开发者和企业的首选。本文将详细介绍 MySQL 的基础概念、安装启…...
OSPF基础(1):工作过程、状态机、更新
OSPF基础 1、技术背景(与RIP密不可分,因为RIP中存在的问题) RIP中存在最大跳数为15的限制,不能适应大规模组网周期性发送全部路由信息,占用大量的带宽资源以路由收敛速度慢以跳数作为度量值存在路由环路可能性每隔30秒…...
工业相机如何获得更好的图像色彩
如何获得更好的图像色彩 大部分的工业自动化检测中对物体的色彩信息并不敏感,因此会使用黑白的相机,但是在显微镜成像、颜色分类识别等领域,相机的色彩还原就显得格外重要,在调节相机色彩方面的参数时,有以下几个方面需…...
使用requestAnimationFrame减少浏览器重绘
文章目录 介绍使用使用rAF前使用rAF后 介绍 在屏幕中,浏览器通常都以60FPS(1/60 s)每帧更新屏幕,但是当前端绑定了一些高频事件,如鼠标移动,屏幕滚动、触摸滑动等时,在一帧的周期内,…...
Mac 终端命令大全
—目录操作— ꔷ mkdir 创建一个目录 mkdir dirname ꔷ rmdir 删除一个目录 rmdir dirname ꔷ mvdir 移动或重命名一个目录 mvdir dir1 dir2 ꔷ cd 改变当前目录 cd dirname ꔷ pwd 显示当前目录的路径名 pwd ꔷ ls 显示当前目录的内容 ls -la ꔷ dircmp 比较两个目录的内容 di…...
如何使用deepseek开发一个翻译API
什么是deepseek Deepseek 是一个基于人工智能技术的自然语言处理平台,提供了多种语言处理能力,包括文本翻译、语义分析、情感分析等。它通过深度学习模型和大规模语料库训练,能够实现高质量的文本翻译和多语言理解。Deepseek 的核心优势在于…...
vue如何解决跨域
文章目录 vue如何解决跨域1. 什么是跨域2. 如何解决2.1 CROS(Cross-Origin Resource Sharing,跨域资源共享)2.2 Proxy2.2.1 使用webpack proxy2.2.2 服务端代理转发2.2.3 通过nginx实现代理 vue如何解决跨域 1. 什么是跨域 跨域本质是浏览器…...
红包雨项目前端部分
创建项目 pnpm i -g vue/cli vue create red_pakage pnpm i sass sass-locader -D pnpm i --save normalize.css pnpm i --save-dev postcss-px-to-viewportpnpm i vantlatest-v2 -S pnpm i babel-plugin-import -Dhttps://vant.pro/vant/v2/#/zh-CN/<van-button click&…...
新版AndroidStudio 修改 jdk版本
一、问题 之前,在安卓项目中配置JDK和Gradle的过程非常直观,只需要进入Android Studio的File菜单中的Project Structure即可进行设置,十分方便。 如下图可以在这修改JDK: 但是升级AndroidStudio之后,比如我升级到了Android Stu…...
【golang学习之旅】使用VScode安装配置Go开发环境
1. 下载并安装Go 1.1 下载地址1.2 选择版本并下载1.3 安装目录1.4 验证是否安装成功 2. 配置环境变量 2.1 配置步骤2.2 GO部分环境变量说明 3. 下载或更新 Vscode 3.1 下载地址3.2 安装步骤 4. 为Go开发配置VScode 1. 下载并安装Go 1.1 下载地址 https://studygolang.com/dl…...
langchain教程-2.prompt
前言 该系列教程的代码: https://github.com/shar-pen/Langchain-MiniTutorial 我主要参考 langchain 官方教程, 有选择性的记录了一下学习内容 这是教程清单 1.初试langchain2.prompt3.OutputParser/输出解析4.model/vllm模型部署和langchain调用5.DocumentLoader/多种文档…...
GGML、GGUF、GPTQ 都是啥?
GGML、GGUF和GPTQ是三种与大型语言模型(LLM)量化和优化相关的技术和格式。它们各自有不同的特点和应用场景,下面将详细解释: 1. GGML(GPT-Generated Model Language) 定义:GGML是一种专为机器学习设计的张量库,由Georgi Gerganov创建。它最初的目标是通过单一文件格式…...
C++ 原码、反码、补码和位操作符
目录 一、原码、反码、补码 二、位操作符 1、左移操作符是双⽬操作符 移位规则:左边抛弃、右边补 0 2、右移操作符是双⽬操作符 逻辑右移:左边⽤ 0 填充,右边丢弃算术右移:左边⽤原该值的符号位填充,右边丢弃 3、…...
idea中git版本回退
idea中git版本回退 将dev分支代码合并到master分支执行回退步骤 将dev分支代码合并到master分支 #合并成功之后 执行回退步骤 #在指定的版本上 右键 #这里选择【Hard】彻底回退 #本地的master分支回退成功 #将本地的master强制推送到远程,需要执行命令 git p…...
揭秘GPT超级提示工程:从原理到实战,打造高效AI协作指南
1. 项目概述:当“Awesome”遇见“Super Prompting”最近在GitHub上闲逛,发现了一个挺有意思的仓库,叫“CyberAlbSecOP/Awesome_GPT_Super_Prompting”。光看这名字,就透着一股“硬核”和“集大成”的味道。作为一个长期和各类大语…...
Grad-CAM实战:用热力图透视神经网络的决策焦点
1. Grad-CAM技术初探:为什么我们需要热力图? 当你训练了一个图像分类模型,准确率高达95%,但你真的了解它是如何做出判断的吗?我曾在项目中遇到过这样的尴尬:模型把一只坐在草地上的哈士奇误判为"狼&qu…...
Python Pydantic介绍(数据校验、自动类型转换、结构化数据建模、序列化JSON、配置管理)pydantic-settings、核心BaseModel、字段约束Field()、FastAPI
文章目录Python 数据校验神器:Pydantic 完全指南一、什么是 Pydantic二、Pydantic 能解决什么问题1)数据校验(Validation)2)自动类型转换(Parsing)3)结构化数据建模4)序列…...
安卓客户端架构解析:从MVVM到网络通信的完整实践
1. 项目概述:一个面向安卓设备的智能客户端最近在整理手头的开源项目时,发现了一个挺有意思的仓库,名字叫TOM88812/xiaozhi-android-client。光看这个标题,你可能会有点摸不着头脑,这“小智”到底是个啥?是…...
Cesium动态泛光效果实战:手把手教你用d3kit插件打造炫酷城市光效(附完整代码)
Cesium动态泛光效果实战:手把手教你用d3kit插件打造炫酷城市光效(附完整代码) 当夜幕降临,城市天际线被霓虹灯勾勒出流动的轮廓,这种视觉冲击力正是现代三维可视化项目的灵魂所在。本文将带你用d3kit这个轻量级插件&am…...
小米汽车Q3真车现身:科技巨头跨界造车的技术路径与市场挑战
1. 项目概述:从“Q3真车现身”看小米汽车的阶段性成果最近,小米汽车项目代号“Q3”的测试车辆在公开道路上被频繁捕获,这已经不是简单的谍照,而是接近量产状态的“真车”现身。作为一名长期关注汽车产业变革,特别是科技…...
AI智能体分类学:从原理到实践,构建高效Agent系统的设计指南
1. 项目概述与核心价值最近在折腾AI智能体(Agent)相关的项目,发现一个挺有意思的现象:大家聊起Agent,要么是“它能帮我写代码”,要么是“它能自动处理客服”,但很少有人能系统地说清楚ÿ…...
为AI智能体设计的任务管理后端:构建标准化、机器友好的任务元模型
1. 项目概述:一个为AI而生的待办清单最近在折腾各种AI工具链和自动化流程时,我遇到了一个挺普遍的问题:如何让AI助手,比如ChatGPT、Claude或者本地部署的大语言模型,更好地理解并管理我手头一堆零散、动态的任务&#…...
科技领跑公益,擎天租机器人“天团”助阵2026渣打上海10公里跑
5月16日,“渣打上海10公里跑”在上海世博庆典广场开跑。国内领先机器人一站式应用平台擎天租携旗下多款明星机器人参与,通过机器人与体育活动的跨界融合,为现场4500名跑者带来了一场科技感十足的助跑盛宴。本次赛事涵盖了10公里个人跑及2公里…...
SuperMap Objects开发避坑指南:从COM引用到内存释放的实战经验总结
SuperMap Objects开发避坑指南:从COM引用到内存释放的实战经验总结 在GIS二次开发领域,SuperMap Objects以其强大的空间数据处理能力备受开发者青睐。然而,当我们将这个COM组件集成到C# WinForms项目中时,往往会遇到一些官方文档…...
