定义全局函数、变量
定义全局函数
声明定义在一个头文件 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(这个例子不对哈, 它用的是宏定义, 预处理阶段会被替换掉)。若是想注册一个全局的回调函数, 就需要定义一个全局的回调函数变量。 下面给一个使用案例
- Utils.h头文件声明
extern int g_localVar;
- .cpp源文件定义
#include "Utils.h"
extern int g_localVar = 3;
定义这里的extern可以省略,头文件的声明不能省
- 其他文件使用,修改
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不就是把别处的头文件复制过来嘛
- 测试: 既然是全局变量, 那么这里修改了, 后面所有用到的地方都生效
// 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
标签:std,头文件,变量,int,定义,localVar,全局,函数 From: https://www.cnblogs.com/shmilyt/p/17454979.html