定义全局函数、变量

定义全局函数、变量

定义全局函数

声明定义在一个头文件 inline

如一些很短的工具函数,创建目录,删除目录之类的

#include <string>
#include <filesystem>

namespace wwc{
	void inline CreateDir(std::string path) {
		std::string cmd = "mkdir -p " + path;
		std::system(cmd.c_str());
	}

       // 这个函数是C++17标准用于生成目录的函数, 目录可递归生成, 且已经存在也不会报错,nice!!!
	void inline CreateDir2(std::string path) {
		std::filesystem::create_directories(path);
	}
}

其实看看官方给的std::to_string(), create_directories等也是inline居多。 使用inline需要注意什么:

  • 解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题

  • 定义(实现)通常放在头文件中

  • 函数体需要简单

  • 它时对编译器的建议

声明,定义分离

函数在.h头文件中声明,.cpp中实现, 注意用#pragma once​或者宏避免头文件被重复定义, 但普通函数被定义在头文件中一定还是会出现:一个或多重定义的问题。(在头文件中实现成员函数, 也是被编译器自动生成为inline函数)

#ifndef MY_LOG_H
#define MY_LOG_H
...
#endif

定义全局变量

C++是不建议使用全局变量的哈,但有时候可能你就需要它呢, 如C++自己定义的INT_MAX(这个例子不对哈, 它用的是宏定义, 预处理阶段会被替换掉)。若是想注册一个全局的回调函数, 就需要定义一个全局的回调函数变量。 下面给一个使用案例

  1. Utils.h头文件声明
extern int g_localVar;
  1. .cpp源文件定义
#include "Utils.h"
extern int g_localVar = 3;

定义这里的extern可以省略,头文件的声明不能省

  1. 其他文件使用,修改
int add(int x)
{
	return x + g_localVar;
}
extern int g_localVar;

int sub(int x)
{
	g_localVar = 5;
	return x - g_localVar;
}

注意包含Utis头文件也是一样的, include不就是把别处的头文件复制过来嘛

  1. 测试: 既然是全局变量, 那么这里修改了, 后面所有用到的地方都生效
// g_localVar = 3
std::cout << add(12) << std::endl;
// g_localVar = 5
std::cout << sub(10) << std::endl; 
// g_localVar = 5
std::cout << add(12) << std::endl;
15
5
17

posted @   shmilyt  阅读(64)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示