常见的全局变量定义

在solidworks中使用全局变量及方程式来进行标注 solidworks绘制完草图避免不了局部的修改,但如果我们每个标注都是由手动标注的,标注量大了,修改起来就会显得很麻烦。有什么方法可以避免在修改的时候一个个的去修改呢?那就是使用方程式及全局变量来实现标注。 阅读详情

常见的全局变量定义

作用域在文件内全局常量

// Test.m
static NSString *const kTestKey = @"test_key"; // 只作用于当前Test.m文件

作用域在工程的全局常量

// Test.h
extern NSString *const kTestKey;

// Test.m
NSString *const kTestKey = @"test_key"; // 作用于整个工程,在需要用到该变量的地方包含Test.h头文件即可

注意

  • 定义变量永远都不应该出现在头文件中,因为如果被包含多次,就会出现变量重定义错误。
  • 头文件中只能出现包含extern关键字的变量声明。

关键字解读

const

  • NSInteger const a = 3;
  • const NSInteger a = 3;

上面两种写法是等效的因为 NSInteger const 等价于 const NSInteger。

  • const NSString *str = @"abc";
  • NSString const *str = @"abc";
  • NSString *const str = @"abc"; // 正确写法

同样,上面第一种和第二种写法是等效的,项目中如果出现前两种写法,大多都不是符合预期的写法,因为str的值依然可以改变。

第三种写法才符合要使用的const的预期,这时候不允许再给str赋值。因为 NSString const * 表示指向 NSString const 的指针,NSString *const 表示指向 NSString 的const指针。

指针被声明为const后,将不允许被重新赋值,否则会编译错误。

static

static除了声明变量为静态变量外,还有一个作用,就是声明作用域在文件内的全局变量。

下面代码声明kTestKey为作用域在当前文件的全局变量:

  • static NSString *const kTestKey = @"test_key";

如果不加static,则表示kTestKey为作用域在整个工程的全局变量。假如工程中其它地方也定义了相同的kTestKey全局变量,就会出现变量重复定义编译失败问题。

extern

如果在Test.m文件中定义了如下全局变量:

  • NSString *const kTestKey = @"test_key";

那么就应该在Test.h文件中进行如下声明,表示该全局变量已经被定义过了:

  • extern NSString *const kTestKey;

如果工程其它位置需要用到kTestKey全局变量,则在.m文件中包含Test.h文件即可(也可以不包含Test.h,直接在.m文件中extern声明就可以使用,但是这样不便于管理)。

C语言中的 const* 和 *const

  • int* - 指向int的指针
  • int const * - 指向const int的指针
  • int * const - 指向int的const指针
  • int const * const - 指向const int的const指针

const放在类型两边是等价的,所以:

  • const int * 等价于 int const *
  • const int * const 等价于 int const * const

下面是一段测试代码:

// const int *a
int b = 1;
const int *a = &b;
int c = 2;
a = &c;
*a = 3; // 编译失败,因为a是指向const int的指针

// int *const a
int b = 1;
int *const a = &b;
int c = 2;
a = &c; // 编译失败,因为a是指向int的const指针
*a = 3;

// const int *const a
int b = 1;
const int *const a;
int c = 2;
a = &c; // 编译失败,因为a是指向const int的const指针
*a = 3; // 编译失败,因为a是指向const int的const指针

参考链接

MFC中定义全局变量和全局函数的方法 使用Visual C++6.0 中的MFC 基本应用时, 由于 MFC 制作的工程由很多文件构成, 它不能象一般C++程序那样随意在类外定义全局变量, 那样有时会在运行程序时出现问。 在软件开发过程中, 有时需要在不同的类之间利用全局变量传递数据, 利用全局函数处理相同问题, 阅读详情

相关推荐

TTL电路搭建半加器实验:操作指南完整版

通过TTL电路搭建半加器,详解逻辑设计与实验步骤,帮助掌握数字电路中的半加器工作原理与实际应用,适合电子技术初学者动手实践。

weixin_42524864的博客 356

UIKIT_EXTERN NSString *const 什么时候要这样写

如果多个.m文件需要用到myURL,可以在每一个.m文件都像下面这样初始化吗?     NSString * const myURL = @"http://xxx.xxx.xxx.xxx:8090";   肯定不行,编译时,会报重复定义.比如在pch文件中写上面这行代码,就相当于为每一个.m文件都写这行代码   要解决重复定义的问题,可以参照苹果的做法,比如系统预置的通知 

码界颓废吴彦祖的博客 6352

R语言笔记十:独立性检验函数

1.独立性检验函数        独立性检验是根据频数信息判断两类因子彼此相关或相互独立的假设检验。所谓独立性就是指变量之间是独立的,没有关系。 独立性检验算法:卡方检验、Fisher检验、Cochran-Mantel-Haenszel检验 2.假设检验 假设检验(Hypothesis Testing)是数理统计学中根据一定假设条件由样本推断总体的一种方法。 原假设——没有发生 备择假设——发生了 具体做法:根据问题的需要对所研究的总体作

weixin_44384631的博客 4111

opencv中Mat类型的全局变量定义

第一步:定义自己的类 class Image_raw #pragma once #ifndef IMAGE_RAW #define IMAGE_RAW #include<QString> #include"Com.h" #include<QImage> #include<opencv2\opencv.hpp> using namespace std; //用户空间一定不能少,否则很多东西无法识别 using namespace cv; class Image_raw

Licyh1725的博客 1929

基于STM32避障/循迹/蓝牙遥控小车的硬件与软件底层设计

1、实现2m的自动直线行驶,要求左右偏移不大于10cm。2、车载显示屏显示车辆当前行驶速度或车辆运行时间,当前方20cm内出现障碍物时显示与前方障碍物的距离,车每次转弯蜂鸣器报警,同时通过左右指示灯指示转弯方向。3、依次驶过障碍物①②③④,且不触碰障碍物。4、成功进行调头转弯,行驶过程中车轮不碾压黑实线。5、在车道指定位置停车且不越界。6、通过红外、蓝牙、WiFi等任意一种方式实现对小车的控制,使其前进、后退、左转、右转。

2301_78758161的博客 1万+

Bentley ORD(openroads designer) 二次开发(BIM)第七节 在ORD SDK中调用MicroStation SDK

从课程刚开始的时候我们就通过学习,了解了ORD的开发是基于MicroStation的,ORD SDK的接口发布的时候也对MicroStation SDK也做了一次发布。这一章将以我们对ORD SDK知识的了解为基础,使用ORD SDK的接口读取道路几何信息、计算桩号,然后再使用MicroStation SDK 读取地形数据和计算投影点的位置,并创建一组方柱形状的Soild。计算方柱底部坐标要经过两大步骤,通过路线的桩号及偏移距离去定位方柱的平面位置,通过方柱的平面位置计算数字地面模型上的投影点的坐标。

chen286990651的博客 881

c++(和opencv)如何把局部变量变成全局变量的功能

今天在开发opencv项目的时候,需求是:视频实时播放,鼠标点击某处,新窗口放大播放局部视频。 这里遇到的问题是:需要用opencv获取鼠标。 背景:opencv有自带的鼠标回调函数,而且它的on_Mouse()函数是封装好的,有五个形参,其中就有鼠标的位置x和y在形参中。 可是 on_Mouse()函数是void型,没有返回值。 问题转化为:我需要用on_Mouse()函数有的鼠标位置,传到另一...

阿正的梦工坊 4376

别再翻手册了!用Materials Studio的Forcite模块,5步搞定复杂溶剂的溶解度参数计算

本文详细介绍了如何使用Materials Studio的Forcite模块,通过5个步骤快速计算复杂溶剂的溶解度参数。从分子建模、结构优化到分子动力学采样,再到最终的内聚能密度计算,该方法大幅提升了石油化工和高分子材料研发中的效率,避免了传统手册查阅和实验的繁琐过程。

weixin_28707739的博客 280

如何在单片机上使用全局变量

如何在单片机上使用全局变量 在单片机中经常会遇到二个不同的.c文件需要使用同一个变量,但如何定义一个变量可以在不同的.c文件中使用呢? 当然是使用全局变量啦,可能有的人知道需要用extern来声明变量,当时总是编译错误,当然啦,我也是经常错误,才写这个笔记的啊 下面我先介绍一下怎么正确的使用,在贴几张错误使用全局变量的方法 如何正确的使用extern,实现main.c led.c同时使用...

qq_39483110的博客 4448

Loki 分布式日志中心服务

分布式日志中心 Loki + Promtail + Grafana

原名又逢乱世。不要放下学习的脚步,毕竟比天天打牌、钓鱼、打游戏更能从内在充实自己。 2354

嵌入式铁头山羊stm32:一文总结

本文是一篇STM32嵌入式开发的综合知识总结,涵盖了STM32基础概念、GPIO、通信协议、外设驱动等核心内容。文章首先介绍了STM32的基本概念和型号含义,然后详细讲解了GPIO的8种工作模式及实验案例。接着重点阐述了USART、I2C、SPI三种通信协议的原理和实现方法,包括硬件连接、编程接口和实验应用。此外还介绍了OLED显示原理、中断系统、定时器、ADC转换等关键技术,每个模块都配有对应的实验案例和代码实现参考。文章内容全面系统,既包含理论知识,又提供实践指导,适合作为STM32开发的快速参考手册。

古泽汉书的博客 2788

PHP变量定义及常见预定义全局变量

文章目录前言一、变量概念二、变量命名2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、变量概念 变量是存储信息的容器 PHP 没有声明变量的命令。 变量在您第一次赋值给它的时候被创建。 PHP 中不需要初始化变量,但对变量进行初始化是个好习惯。未初始化的变量具有其类型的默认值。布尔类型的变量默认值是 FALSE,整

VVIP______的博客 1939

python:实现矩阵SVD分解(附完整源码)

python:实现矩阵SVD分解(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 603

Nodejs 定义全局变量

theme: smartblue 参考 Nodejs 第十章(全局变量) - 掘金 (juejin.cn) 定义与获取全局变量 常见全局变量

xy的博客 587

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

c语言中void的初始值设定项,全局变量的定义/初始化:常见做法?(面向C)

几天前我发布了一个类似的问题,但它更适合于任何*.designer.cs文件。这个问题是面向类内全局变量的声明和初始化的。据我所知,将所有全局变量放在类定义的开头,然后按任意顺序(我更喜欢getter和setter,然后是构造函数,然后是事件,然后是misc函数),这几乎是常见的做法(除了*.designer.cs文件)。好吧,我已经看到了,并且在声明中设置了一个全局变量的地方,我自己也做过。我不...

weixin_31951365的博客 1122

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

(4)全局变量、局部变量、常见对象(Object、String)、自定义方法

如题

FixedStar 的博客 845

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C语言全局变量定义方法

今天调试系统的时候,需要定义几个全局位变量,定义好后一编译,发现错误一大堆,错误基本都是位变量定义时产生的。以前也定义过全局变量啊,但是先前怎么没错误?瞎折腾了一会最后还是发现问题出在细节上面了。以前只是侥幸没遇到而已。今天做个总结,以后再忘记了就回来直接查一下。      我们都知道定义在函数外部的变量就叫做全局变量,但是通常只有一个C文件和一个H文件的时候那样定义是不会出问题的。一个大的

晓阳 的专栏 4907

C++全局变量的声明和定义

参考:http://wrchen.blog.sohu.com/71617539.html (1)编译单元(模块) 在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作: 第一步,将每个.cpp(.c)和相应的.h文件编译成obj文件; 第二步,将工程中所有的obj文件进行LINK,生成最终.exe文件。 那么,错误可能在两个地方产

candyliuxj 18万+

c语言全局变量6,C语言全局变量定义方法

今天调试系统的时候,需要定义几个全局位变量,定义好后一编译,发现错误一大堆,错误基本都是位变量定义时产生的。以前也定义过全局变量啊,但是先前怎么没错误?瞎折腾了一会最后还是发现问题出在细节上面了。以前只是侥幸没遇到而已。今天做个总结,以后再忘记了就回来直接查一下。我们都知道定义在函数外部的变量就叫做全局变量,但是通常只有一个C文件和一个H文件的时候那样定义是不会出问题的。一个大的系统会包含好多个....

weixin_26717681的博客 1335

微信小程序全局变量注意这四点,让你轻松玩转全局变量

全局变量这一块,对于新手来说还是有很多坑的。注意好以下几点,让你轻松学会全局变量的使用。 第一、全局变量的定义 在你初次打开app.js文件时,很容易混淆。在onLaunch函数里是有个globalData对象,但请注意,你的全局变量不是写在这里,而是另外在函数外定义一个globalData。例如下图: globalData一定要定义在与函数同级的位置。然后在globalData里面编写你的全局变量的值。 第二、全局变量的赋值 一般初始化的时候会给空值或者固定值,然后通过后期的小程序使用过程中改变全局变量

专注前端技术,包括Web端、移动端、小程序、APP 6703

VC中如何定义全局变量

放在任意文件里    在其他文件里用 extern 声明    或者在App类中声明一个公有成员    在程序其它类中可以用    AfxGetApp() 得到一个App对象指针,将它转化成你的App类指针    然后就可以通过指针->变量使用了    还有就是在    MFC中定义只有静态成员的类 到时候直接应用就可以了,还不   破坏结构   也可以新建

dong_cc的专栏 1543

学习28335中遇到的全局变量定义方法

在函数内部定义的变量称为局部变量 在源文件.c里面定义的全局变量只能供这个.c文件使用,别的文件不能够使用。 如果想要定义一个所有源文件都能够使用的变量,需要在头文件.h中进行定义,前面需要加上extern,并且对应的源文件也要正常定义一个全局变量。 例如: password.c unsigned int m[]; 以上的m[],只能在password.c文件中使用 password.c unsigned int n[]; password.h extern unsigned int n[]; 以上的n[

weixin_44461002的博客 2158

C语言全局变量的定义与声明

    C语言中全局变量的定义与声明困扰着许多C语言初学者。本文讲述了全局变量定义与声明的用法,而且本为也将阐述这种用法的内在原理。我们先从两个错误例子引入,以下两个例程都在vc6.0平台上测试。 两种错误例程 1.unresolved external symbol 例子包含两个C文件(test.c)和(first.c)和一个头文件(test.h)。下边具体展示下它们的代码。 test....

weixin_33868027的博客 4839

c语言中全矩变量定义,C语言——全局变量的定义与声明

转自:htmlC语言中全局变量的定义与声明困扰着许多C语言初学者。本文讲述了全局变量定义与声明的用法,并且本为也将阐述这种用法的内在原理。咱们先从两个错误例子引入,如下两个例程都在vc6.0平台上测试。测试两种错误例程this1.unresolved external symbolhtm例子包含两个C文件(test.c)和(first.c)和一个头文件(test.h)。下边具体展现下它们的代码。对...

weixin_42466868的博客 336

C/C++全局变量的定义与引用问题

最近在忙live555项目;说实话这是我做的第一个大型项目。虽然工作这么久还真是第一次做这么大项目;感觉自己这一年还真是没有一点进步;加个全局变量废了我半天力。废话不多说,切入正题 全局变量,最早我看书C primer Plus里说的应该是叫做局外变量吧。总是就是以关键字extern 在一个头文件 声明的,然后这个被声明的变量可以被项目里的任意一个.cpp或者.c文件引用,引用的方式有两

u012314708的博客 1万+

【Node】【8】全局对象和全局变量

node中全局变量和全局对象的基本介绍

qq_43720551的博客 1287
上一篇: 正确使用NS_DESIGNATED_INITIALIZER
下一篇: 关于前后端接口的可扩展性思考
zcube
博客等级 码龄17年 170粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值