C++服务器框架开发1——项目介绍/分布式/#ifndef与#pragma once

news/2025/2/27 22:59:10/

该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。
其教学视频见:[C++高级教程]从零开始开发服务器框架(sylar)

C++服务器开发1——项目介绍/分布式/#ifndef与#pragma once

  • 项目介绍
  • 分布式
  • #ifndef与#pragma once

最近开始学习下C++的项目开发,找了很多,在b站发现了一个教开发一套C++高性能服务器框架的up(sylar-yin),而且它有提供源码以及自己的博客。内容看着很全,就打算学一下。
目前我的C++能力仅仅是会基础,以及刷了几十到算法题。但是刷题太枯燥了,我离实习找工作还有段时间,所以想抽空先学个完整的开发项目,就挑了这个,如果后面发现学不会,我可能会放弃,但我会尽量学习完这个up的80个视频。本着需要什么学什么的态度,我遇到不会的,就查一下,然后做个笔记。

这次的笔记内容是:项目介绍、什么是分布式、#ifndef与#pragma once

项目介绍

详细见这页博文:http://www.sylar.top/blog/?p=137
github原话:C++高性能分布式服务器框架,webserver,websocket server,自定义tcp_server(包含日志模块,配置模块,线程模块,协程模块,协程调度模块,io协程调度模块,hook模块,socket模块,bytearray序列化,http模块,TcpServer模块,Websocket模块,Https模块等, Smtp邮件模块, MySQL, SQLite3, ORM,Redis,Zookeeper)

我看完感觉很多都不懂,先搁置吧。先学习下“分布式”。

分布式

我主要看的这篇:什么是分布式,分布式和集群的区别又是什么?这一篇让你彻底明白!
分布式:个系统在个服务器上协作完成单个任务。
集群式:个系统在个服务器上 ~~~~~       完成单个任务。
概括两者的差异:分布式系统的服务器任务是不同的,它们之间相互调用,完成了一个大的任务。而集群式系统的服务器任务是相同的,它们只是分担了客户端的请求,但是最终需要汇总到主服务器。这导致像数据库、主服务器等可能会过载。

#ifndef与#pragma once

视频1中,最开始讲的代码是log.h。然后吃下了如下的结构:

#ifndef __SYLAR_LOG_H__
#define __SYLAR_LOG_H__
//这里放置了各种include和定义语句
#endif

这种写法,是为了避免重复编译的,因为,这个log.h文件,很可能会被多个文件include,如果用了这种写法,当编译过一次后,第二次遇到include时就会自动跳过这个编译。

它和#pragma once的功能很像,我看了我之前刷题的代码,是将#pragma once放在了代码最前面。

差异:1#ifndef是打开文件后,根据__SYLAR_LOG_H__来确认是否已经编译过。所以它需要打开文件查看后后才能确定,编译时耗时比较长。注:有可能会因为不同头文件的宏名相同后,后编译的那个头文件被跳过编译,导致编译时报错某些变量或类没有声明。2#pragma once针对文件的,所以没有宏名相同这种问题,并且它因为不需要打开文件而使得编译速度更快。注:如果有头文件被拷贝多份,就会出现重复编译的问题。且这种方法在一些老编译器上不支持。

个人认为,还是选择第一种靠谱些,虽然编译慢,但出错的可能性更低。


http://www.ppmy.cn/news/76021.html

相关文章

ROS 工作空间与功能包的创建(三)

执行命令: mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src/catkin_init_workspace echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc 效果: 输入命令查看添加成功了没有 tail ~/.bashrc 编译工程:执行命令 cd ~…

时代浪潮已经袭来 AI人工智能频频爆火 ChatGPT改变行业未来

目录 1 人工智能的发展 1.1人工智能发展历程 1.1.1 人工智能的起源 1.1.2 人工智能发展的起起伏伏 1.1.3 人工智能多元化 2 什么是ChatGPT 2.1 ChatGPT的主要功能 2.2ChatGPT对企业的多种优势 2.3 不必担心ChatGPT带来的焦虑 3 人工智能对行业未来的影响 3.1 人工智…

KDZK-F励磁综合特性测试仪

一、产品概述 KDZK-F励磁综合特性测试仪是判断发电机转子绕组有无匝间短路的专用仪器,可以自动、手动(单向或双向)测量转子绕组的电压、电流、阻抗、功率、相位角等参数。 二、功能与特点 旋转鼠标,操作更方便。 可选择快速的自…

当云技术与 Serverless 遇见容器,云计算迎来新的弹性伸缩时代

随着云计算技术的不断发展,Serverless 和容器已经成为了云计算部署应用的两大法宝。容器技术的发展历程中,业界普遍将 2014 年视为重要的时间节点,这一年,Docker 公司正式发布了 Docker 镜像,并开源了容器引擎。紧接着…

发挥CWPP在零售行业安全关键价值

新钛云服已累计为您分享747篇技术干货 CWPP产品对于零售行业安全有关键价值,可以极大提升零售行业安全水平,是零售行业必备的安全产品。 零售行业的特点 零售行业的特点是实时在线、数据有独特价值,安全挑战是缺乏安全投入和人员。 实时在线方…

【最新整理】一起看看86 个 ChatGPT 插件

今天我们来看看这86个插件都是做什么的? Shimmer:跟踪膳食并获得更健康生活方式的见解 World News:总结新闻头条 Bohita:用您能描述的任何图像制作服装 Portfolio Pilot:您的 AI 投资指南:投资组合评估…

详解Windows系统安装TensorRT

目录 下载TensorRT安装TensorRT测试 TensorRT 是 NVIDIA 推出的一款高性能神经网络部署引擎.Windows系统下TensorRT目前不能简单直接通过pip指令自动下载安装, 安装之前还需要提前安装好 CUDA 和 CUDNN. CUDA和CUDNN安装可参考: 详解 Windows系统下安装 CUDA 与 CUDNN. &…

使用Python中PDB模块中的命令来调试Python代码的教程

这篇文章主要介绍了使用Python中PDB模块中的命令来调试Python代码的教程,包括设置断点来修改代码等、对于Python团队项目工作有一定帮助,需要的朋友可以参考下 你有多少次陷入不得不更改别人代码的境地?如果你是一个开发团队的一员,那么你遇…