c高级篇(一)——难发现的命名重复
c高级篇(一)——难发现的命名重复前言: 这是我开始编写的第一个高级篇博文,分类的大体的原则是,基础篇写必须掌握的基础知识,进阶篇写需要一定理解深度才能真正掌握的知识,而高级篇写一些偏经验性的,书本上可能学不到的知识。 1 宏和枚举名重复 为什么需要命名空间?在c中并不支持命名命名空间,在大型项目中会遇到烦人的命名重复的问题,比如宏名、枚举名、全局变量名、函数名。大型工程中,不同的模块会分配给不同的人或团队开发,各自模块测试通过,最终合到一起时可能会发现命名有较多重复,没发现的就将成为Bug。比如下面这c段代码。 123456789101112131415#include <stdio.h>typedef enum{ NAME = 0} tenuTest;#define NAME 5int main(void){ printf("NAME is %d\n", NAME); return 0;} 这段代码枚举和宏都定义了...
c++基础篇(一)——输入输出
c++基础篇(一)——输入输出前言: 想起当年在图书馆自学c++,奈何毕业七年了,工作中并不需要使用c++。最近想搞几个开源项目,甚至将来做独立游戏开发,遂将书本拾起,重温旧梦。 博文将假定阅读者已有一定c基础,在此基础上学习c++。 1 第一个c++程序 用经典的 Hello World! 输出开局。 12345678#include <iostream>int main(void){ std::cout << "Hello World!" << std::endl; return 0;} 输出结果为。 1Hello World! cout 是c++的打印输出,std:: 表示其所处的命名空间, endl 表示输出换行。 123456789101112#include <iostream>int main(void){ int number...
自娱自乐,我的博客(十九)——腾讯云COS做图床
自娱自乐,我的博客(十九)——腾讯云COS做图床前言: jsDelivr做图床有大小限制,要白剽觉得太麻烦,好在腾讯云的COS也不贵,就当为信仰充值了。 1 COS介绍 COS (Cloud Object Storage)是一种存储海量文件的分布式存储服务,具有高扩展性、低成本、可靠安全等优点。完全可胜任做博客图床的。 2 搭建COS图床2.1 购买COS服务 登陆 腾讯云官网COS购买页面 购买COS,目前做活动,新用户首次购买,一年只需要一元。 若不是新用户就没有这些优惠了,非新用户一年需要9.77元,也很便宜了。 上面只是购买了存储容量的服务,数据访问产生的流量费用是另外计费的,建议购买流量套餐,这样费用更划算。购买下行流量包一年需要41.4元。访问量高的话一定要开流量套餐,不然费用会高,账户里不建议留太多钱,因为余额不足会暂停服务,但余额足够就持续扣款了。 2.2 搭建COS图床 在控制台点击...
自娱自乐,我的博客(十八)——Github + jsDelivr图床方案
自娱自乐,我的博客(十八)——Github + jsDelivr图床方案前言: gitee的免费图床没了,如果想白剽,还可使用jsDelivr做图床。 1 jsDelivr介绍 jsDelivr是一个免费且开源的公共CDN(内容分发网络)服务,可用于Github图片访问的加速,其实Github就是最好的免费图床,奈何国内访问Github速度比较慢。Github的图片经过jsDelivr加速后访问速度可满足博客网站的使用。 2 搭建Github + jsDelivr图床 先在Github创建一个仓库,专用于存放博客中的图片,而且建议存放路径和文章路径对应。Github仓库里的每张图片就有自己的地址,比如 https://github.com/onlycalm/blogimage/blob/main/res/Avatar.png 。要让这张图片经过jsDelivr加速,只需要修改网址即可,网址格式有两种。 通过分支:https://cdn.jsdelivr.net/gh//@/...
Qt6基础篇(一)——安装Qt Creator
Qt6基础篇(一)——安装Qt Creator前言: 这篇文章介绍如何安装Qt6并运行第一个自己的窗口程序。 1 下载 目前最新的Qt6版本是v6.7.2,安装方式为在 官网 下载一个在线安装器,较老的版本还能离线安装。 2 安装 点击 Linux x64 下载在线安装器。 勾选 Execute ,允许*.run文件执行。 执行指令运行Qt在线安装程序。 1sudo ./qt-online-installer-linux-x64-4.8.0.run 填写自己Qt账号,如果还没有账号先去官网注册。然后点击 Next 。 勾选已知晓开源协议,如果是个人开发则写 Personal ,如果是给公司开发则写公司名。请遵守开源协议。 点击下一步开始安装。 路径按照默认即可。当本地有下好的特定版本的Qt安装文件时,选择第一个 Custom Installation...
CMake基础篇(九)——编译选项
CMake基础篇(九)——编译选项前言: 本篇文章介绍CMake的一些编译项配置。 1 add_compile_options 设置编译选项可以使用 add_compile_options 函数。 1add_compile_options(-std=c++11 -Wall -O2)
CMake基础篇(七)——编译动态或静态库
CMake基础篇(七)——编译动态或静态库前言: 本篇文章介绍CMake如何编译动态或静态库。 1 编译库 在项目实战中常常会涉及到使用第三方库,可以是动态或静态库,而用CMake如何将源码编译成动态或静态库是本文要探讨的话题。 目录结构如下。 1234567891011121314╰─ tree.├── build├── CMakeLists.txt├── inc│ └── alg.h├── lib│ ├── build│ └── CMakeLists.txt├── main.c├── main.h├── README.md└── src └── alg.c 我们要将alg.c和alg.h编译为动态库(*.so)和静态(*.a)库。在lib路径下编辑如下CMakeLists.txt文件。 1234567cmake_minimum_required(VERSION...
CMake基础篇(八)——构建更复杂的工程
CMake基础篇(八)——构建更复杂的工程前言: 本篇文章介绍CMake如何构建更复杂的工程。 1 带有多个源文件 如果一个工程有多个源文件需要编译,而源文件都在工程根目录下,只需要在CMake中增加源文件依赖的描述即可。目录结构如下。 12345678╰─ tree.├── alg.c├── alg.h├── build├── CMakeLists.txt├── main.c└── README.md main.c。 1234567#include <stdio.h>#include "alg.h"void main(void){ printf("Sum = %d\n", Add(1, 2));} alg.c。 123456#include "alg.h"int Add(int Num1, int Num2){ return Num1 +...
CMake基础篇(六)——常用函数
CMake基础篇(六)——常用函数前言: 本篇文章介绍CMake常用函数。 1 find_package&esmp; find_package是CMake中一个非常重要的命令,它的主要功能是在系统上查找外部项目或库,并将这些项目的配置信息集成到当前项目的构建过程中。这个命令使得CMake能够支持各种第三方库和工具链,简化了跨平台构建的复杂性。以下是find_package的一些关键功能和用法说明: 查找库或项目:find_package负责搜索指定的库或项目,并设置一系列变量来描述找到的库或项目的路径、编译选项等。这些信息随后可用于链接库、包含头文件路径等。 配置组件:许多现代库(如Qt5、Boost等)都是模块化的,find_package允许你指定需要哪些组件(如前所述的COMPONENTS...
CMake基础篇(五)——宏
CMake基础篇(五)——宏前言: 本篇文章帮助你快速熟悉CMake宏的使用。 1 用法 CMake的宏原理和c/c++相同,本质都是替换。以下代码说明了宏的参数是字符串替换的特点。 12345678910111213141516171819202122232425project(ProjectName)macro(PrintAndModifyMacro var) message(STATUS "Macro before: var = ${var}") set(var "Modified by Macro") message(STATUS "Macro after: var = ${var}")endmacro()function(PrintAndModifyFunction var) message(STATUS "Function before: var =...