文档章节

第10天C语言(02):内部全局变量和外部全局变量

lyh2017iOS
 lyh2017iOS
发布于 2017/07/07 09:58
字数 1094
阅读 3
收藏 0
点赞 0
评论 0

#pragma mark 内部全局变量和外部全局变量 ###pragma mark 概念

/**
 默认情况下所有的全局变量都是 外部全局变量
只要给全局变量加上 static 关键字 就是内部全局变量
 
 外:多个同名的外部全局变量 指向 同一块存储空间
 内:多个同名的全局变量 如果不在同一个文件中,那么指向不同的存储空间

 只要用static修改的全局变量就是内部全局变量,只能在当前文件中使用
 
 extern:
 用于声明一个外部全局变量
 声明只需要在使用变量之前声明就可以了
 static:
 用于定义一个内部全局变量
 声明和定义的区别:
 声明不会开辟存储空间
 定义会开辟存储空间
 
 */

###pragma mark 代码 ####mian.c

#include <stdio.h>
#include "lyh.h"
/*
 全局变量分为两种:
 1.外部全局变量,默认情况下所有的全局变量都是外部全局变量
    什么是外部全局变量? 可以被其他文件访问的全局变量 我们称之为 外部全局变量
 
 2. 内部全局变量, 只要给全局变量加上 static 关键字 就是内部全局变量
    什么是内部全局变量? 只能被当前文件访问的全局变量 我们称之为 内部全局变量
 
 外部全局变量 有一个特点:
    可以定义同名的外部全局变量
    多个同名的外部全局变量 指向 同一块存储空间
 
 内部全局变量 又一个特点:
    也可以定义多个同名的内部全局变量
    多个同名的全局变量 如果不在同一个文件中,那么指向不同的存储空间
 
 为了提高数据的安全性, 不让别人在其他文件中修改我们的全局变量,C语言提供了另外一个用于修改全局变量的关键字,static
 // 只要用static修改的全局变量就是内部全局变量,只能在当前文件中使用
 这样就可以提高我们全局变量的安全性
 
 如果多个文件中存在同名的 内部全局变量,相互不影响
 如果既有外部全局变量 也有内部全局变量, 那么会优先访问内部全局变量
 
 extern:
    用于声明一个外部全局变量
    声明只需要在使用变量之前声明就可以了
 static:
    用于定义一个内部全局变量
 声明和定义的区别:
    声明不会开辟存储空间
    定义会开辟存储空间
 */

// 编译 出现 main.o
// 说我在 mian.c 里面定义了一个num

// int num; // 外部全局变量

static int num; // 内部全局变量
int main()
{
    /*
     Undefined symbols for architecture x86_64:
     "_test", referenced from:
     _main in main.o
     ld: symbol(s) not found for architecture x86_64
     clang: error: linker command failed with exit code 1 (use -v to see invocation)
     
    找不到text函数
     
     */
    num = 998; 
    test();
    printf("main.c num = %i\n",num);

    return 0;
}


####lyh.c

#include "lyh.h"
// duplicate symbol _num in: 说我重复定义了一个num

/*
// 编译 出现 lyh.o
// 说我在1 mian.c 里面定义了一个num
//int num;   // 由于Xcode6升级之后导致的,在Xcode6以前是可以的
 如果在lyh.c当中 定义外部全局变量 num, 那么我们说过 同名的外部全局变量 指向同一块存储空间,那么如果在多个文件中有同名的外部全局变量,可能导致a文件的数据被B文件不小心修改
 降低了数据的封装性,提高了错误的风险
*/
// extern 关键字 用于修饰全局变量, 代表声明一个全局变量
// 注意:声明全局变量 和 声明函数 一样 , 仅仅是告诉系统我们有这个全局变量, 但并不会真正的开辟存储空间
//extern int num;    // 如果使用命令行输出 不会有问题 cc-c mian.c  cc - lyh.c 生成 .o文件 然后  cc mian.o lyh.o 生成a.out
/**
 Undefined symbols for architecture x86_64:
 "_num", referenced from:
 _test in lyh.o
 
 extern 是声明一个变量, 而不是开辟一块存储空间
 */
//int num;
void test()
{
extern int num;
    printf("lyh.c num = %i\n",num);
    num = 666;
}
int num;

© 著作权归作者所有

共有 人打赏支持
lyh2017iOS
粉丝 1
博文 354
码字总数 137380
作品 0
朝阳
C语言和PHP语法相异点

C语言和PHP语法相异点技术 maybe yes 发表于2015-02-05 16:09 原文链接 : http://blog.lmlphp.com/archives/80 来自 : LMLPHP后院 PHP 的语法规则和 C 语言语法规则非常的相似,PHP 中很多内...

hosser ⋅ 2015/05/03 ⋅ 2

Objective-C学习总结——函数与变量的语法特性

Objective-C学习总结——函数与变量的语法特性 Objective-C是一种以C为基础,并集合Smalltalk特征扩展出来的面向对象的语言。在本章节中主要记录总结OC中函数与变量的C语言特性。 全局变量和...

C语言开发 ⋅ 2017/12/13 ⋅ 0

c语言静态变量和静态函数

static C语言 C语言程序可以看成由一系列外部对象构成,这些外部对象可能是变量或函数。而内部变量是指定义在函数内部的函数参数及变量。外部变量定义在函数之外,因此可以在许多函数中使用。...

AlphaJay ⋅ 2010/08/19 ⋅ 0

C语言基础-10-变量类型

C语言有丰富的数据类型和运算符,因此计算能力非常强大,计算过程中使用的值一般用变量来存储。变量也是有分类型的,不同类型的变量有不同的存储类型、不同的生命周期、不同的作用域,C语言也...

Corwien ⋅ 2016/03/16 ⋅ 0

二十、static和extern关键字2-对变量的作用

说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略 上一讲介绍了stati...

长平狐 ⋅ 2013/03/28 ⋅ 0

十八、变量类型

说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略 C语言有丰富的数据...

长平狐 ⋅ 2013/03/28 ⋅ 0

闭包那一点事

闭包要解决的问题 提供一种间接的方式能够访问到函数内部的数据(变量) 贴吧上一个闭包有什么用的问题和回答 闭包的基本模式 在函数内部创建函数(内部函数),在这个内部函数中,可以操作外部函...

SubinY ⋅ 2016/12/10 ⋅ 0

C语言自学《八》---- C语言知识总结

一、函数 什么情况下需要定义一个函数? 常用的功能 重复的功能 低效率的代码 一个函数可以没有参数 void test(void){ //void可以不写 } 一个函数可以没有返回值,如果没有定义,默认是返回i...

罗眯眯 ⋅ 2014/04/05 ⋅ 0

C语言基础-12-static和extern关键字2-对变量的作用

上一讲介绍了static和extern对函数的作用,static用来定义一个内部函数,不允许其他文件访问;extern用来定义和声明一个外部函数,允许其他文件访问。static和extern对变量也有作用,不过跟函...

Corwien ⋅ 2016/03/16 ⋅ 0

c语言中static用法总结

一、c程序存储空间布局 C程序一直由下列部分组成: 正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 初始化数据段(数据段)——在程序...

一滴淡定的水 ⋅ 2013/08/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

NFS介绍 NFS服务端安装配置 NFS配置选项

NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导...

lyy549745 ⋅ 26分钟前 ⋅ 0

Spring AOP 源码分析 - 筛选合适的通知器

1.简介 从本篇文章开始,我将会对 Spring AOP 部分的源码进行分析。本文是 Spring AOP 源码分析系列文章的第二篇,本文主要分析 Spring AOP 是如何为目标 bean 筛选出合适的通知器(Advisor...

java高级架构牛人 ⋅ 49分钟前 ⋅ 0

HTML-标签手册

标签 描述 <!--...--> 定义注释。 <!DOCTYPE> 定义文档类型。 <a> 定义锚。超链接 <abbr> 定义缩写。 <acronym> 定义只取首字母的缩写。 <address> 定义文档作者或拥有者的联系信息。 <apple......

ZHAO_JH ⋅ 50分钟前 ⋅ 0

SylixOS在t_main中使用硬浮点方法

问题描述 在某些使用场景中,应用程序不使用动态加载的方式执行,而是跟随BSP在 t_main 线程中启动,此时应用代码是跟随 BSP 进行编译的。由于 BSP 默认使用软浮点,所以会导致应用代码中的浮...

zhywxyy ⋅ 57分钟前 ⋅ 0

JsBridge原理分析

看了这个Github代码 https://github.com/lzyzsd/JsBridge,想起N年前比较火的Hybrid方案,想看看现在跨平台调用实现有什么新的实现方式。代码看下来之后发现确实有点独特之处,这里先把核心的...

Kingguary ⋅ 今天 ⋅ 0

Intellij IDEA神器常用技巧五-真正常用快捷键(收藏级)

如果你觉得前面几篇博文太啰嗦,下面是博主多年使用Intellij IDEA真正常用快捷键,建议收藏!!! sout,System.out.println()快捷键 fori,for循环快捷键 psvm,main方法快捷键 Alt+Home,导...

Mkeeper ⋅ 今天 ⋅ 0

Java 静态代码分析工具简要分析与使用

本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能、特性等方面对它们进行分析和比较,...

Oo若离oO ⋅ 今天 ⋅ 0

SpringBoot自动配置小记

spring-boot项目的特色就在于它的自动配置,自动配置就是开箱即用的本源。 不过支持一个子项目的自动配置,往往比较复杂,无论是sping自己的项目,还是第三方的,都是如此。刚接触会有点乱乱...

大_于 ⋅ 今天 ⋅ 0

React jsx 中写更优雅、直观的条件运算符

在这篇文字中我学到了很多知识,同时结合工作中的一些经验也在思考一些东西。比如条件运算符 Conditional Operator condition ? expr_if_true : expr_if_false 在jsx中书写条件语句我们经常都...

开源中国最帅没有之一 ⋅ 今天 ⋅ 0

vim编辑模式与命令模式

5.5 进入编辑模式 从编辑模式返回一般模式“Esc” 5.6 vim命令模式 命令 :“nohl”=no high light 无高亮,取消内容中高亮标记 "x":保存退出,和wq的区别是,当进入一个文件未进行编辑时,使...

弓正 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部