首页 > 其他分享 >定义全局函数、变量

定义全局函数、变量

时间:2023-06-03 23:24:41浏览次数:28  
标签:std 头文件 变量 int 定义 localVar 全局 函数

定义全局函数、变量

定义全局函数

声明定义在一个头文件 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

标签:std,头文件,变量,int,定义,localVar,全局,函数
From: https://www.cnblogs.com/shmilyt/p/17454979.html

相关文章

  • svgicon 实现自定义 svg icon
      对于后台管理框架,经常要用到自定义的svg来当做路由的icon图标。https://mmf-fe.github.io/svgicon,这是这款插件的地址。这里总结下在vue3+vite中使用改插件的方式。安装yarnadd@yzfe/svgicon@yzfe/vue3-svgiconyarnaddvite-plugin-svgicon--dev配置vit......
  • 二、JMX自定义MBean
    一、自定义MBeanpublicinterfaceHelloMBean{StringgetName();voidsetName(Stringname);Stringprint();}HelloMBean必须以MBean结尾。@Slf4jpublicclassHelloimplementsHelloMBean{privateStringname;@OverridepublicSt......
  • 第2章. 变量和简单数据类型
    2.2变量2.2.1变量的命名和使用2.2.2使用变量时避免命名错误2.2.3变量是标签2.3字符串2.3.1使用方法修改字符串的大小写2.3.2在字符串中使用变量2.3.3使用制表符或换行符来添加空白2.3.4删除空白2.3.5使用字符串时避免语法错误2.4数2.4.1整数2.4.2浮点数......
  • 6.1 数组定义
    publicclassHelloWorld{publicstaticvoidmain(String[]args){//intdata[]={1,2,3};//静态初始化-简略格式intdata[]=newint[]{11,22,33};//静态初始化-完整格式(讲师推荐完整格式!!!)//intdata[]=newint[3];//......
  • VMware SD-WAN 5.2 发布 - 软件定义的 WAN
    VMwareSD-WAN5.2发布-软件定义的WANSD-WAN解决方案的领导者请访问原文链接:https://sysin.org/blog/vmware-sd-wan-5/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org产品概述软件定义的WAN(SD-WAN)SD-WAN的功能特性简化的SD-WAN了解软件定义的WAN......
  • Android 自定义View 之 饼状进度条
    饼状进度条前言正文一、XML样式二、构造方法三、测量四、绘制①绘制描边①绘制进度五、API方法六、使用七、源码前言  前面写了圆环进度条,这次我们来写一个饼状进度条,首先看一下效果图:正文  效果图感觉怎么样呢?下面我们来实现这个自定义View,依然是写在EasyView这个项目中,这......
  • 【python】类变量和成员变量
    类变量定义在类里面定义,且不位于构造或者成员函数里面,同时没有"self."的前缀;或者在类外定义,用 类名.类变量名 来新增加类变量。使用两种使用方法:(1)类名.类变量名(如下的Test.a)(2)类的实例对象.类变量名(如下的T.a)exp:classTest: a=1 ###类变量 def__i......
  • LangChain教程 – 如何构建自定义知识聊天机器人
    您可能已经了解到过去几个月发布的大量AI应用程序。您甚至可能已经开始使用其中的一些。ChatPDF和CustomGPTAI等AI工具已经对人们变得非常有用——这是有充分理由的。您需要滚动浏览50页文档才能找到简单答案的日子已经一去不复返了。相反,您可以依靠AI来完成繁重的工作......
  • odoo14 使用ir.actions.client 自定义弹窗内容
    ir.actions.client介绍ir.actions.client是odooactions事件的一种,触发一个在客户端实现(即js文件中定义的函数,通过core.action_registry.add(tag,函数名)注册到odoo中)动作tag--action在客户端的标识符,一般是一个专用的字符串,在js文件中注册该动作时指定。params(可......
  • C语言-变量
    变量的作用域作用域(scope)指的是变量生效的范围。C语言的变量作用域主要有两种:文件作用域(filescope)和块作用域(blockscope)。文件作用域(filescope)指的是,在源码文件顶层声明的变量,从声明的位置到文件结束都有效。intx=1;intmain(void){printf("%i\n",x);}上面示例中,变......