[C语言 - 6] static & extern

时间:2022-08-30 13:16:35

A. extern函数

一个c文件生成一个obj文件
 
外部函数:允许其他文件访问、调用的函数(默认函数为外部函数),不允许存在同名的外部函数
 
my.c
 //define a extern function perfectly
void extern testEx()
{
printf("my.c ==> call external function\n");
}
main.c
 //declare the function first to apply the C99 compiler standard
void extern testEx(); int main(int argc, const char * argv[]) {
testEx();
return ;
}
 
B. static函数
内部函数:只能在当前文件中使用的函数,不同的源文件可以有同名的内部函数
使用static修饰就可以定义内部函数
 
one.c
 static void one()
{
printf("one.c ==> one()\n");
}
 
C.extern 与全局变量
java中可以调用后定义变量
c不能使用定义前的全局变量
ps:定义和声明是两个不同的步骤
 //first solution, define the variable before calling
//int a; //declare a variable
extern int a; int main(int argc, const char * argv[]) { a = ; return ;
} //define the variable
int a;
若想在某个全局变量声明之前使用,就需要使用extern修饰变量,表示该变量即将在下面定义。
 void test()
{
extern int b;
printf("b = %d\n", b);
} int b = ;
 
D.static和全局变量
定义和声明一个内部变量,只能被本文件访问,不能被其他文件访问
 
 
E.static与局部变量
被static修饰的局部变量,生命周期能周延长到程序结束
但是作用域没有改变
 void test()
{
static int e = ;
e++;
printf("e = %d\n", e);
}
main调用
    test();
    test();
    test();
 
out:
e = 11
e = 12
e = 13
 
 
F.全局/局部变量:
变量可以在函数内部或者外部声明
 
a.全局变量中:
全局变量(函数外)可以重复声明,不能重复定义
int a;//标记为weak,允许进行定义
int a = 4;//succuss,标记为strong,以此变量为同名全局变量的标准,不允许进行多重定义
int a = 5;//error
如在不同的源文件中存在同名全局变量,都是指的同一个变量
 
b.局部变量:
局部变量(函数内)不能重复声明
 
内部变量对外部变量的影响
可以区分开两个同名变量
 
 
static & extern 总结
extern能够声明一个全局变量,但是不能定义?
—》能声明,不能重复定义
static 可以声明并定义一个内部变量?
 
 
 
     

[C语言 - 6] static & extern的更多相关文章

  1. 【语法】修饰符 static extern const

    转载自:http://my.oschina.net/u/2560887/blog/552683 一.C语言中的static的作用 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有 ...

  2. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  3. 李洪强iOS经典面试题155 - const,static,extern详解(面试必备)

    李洪强iOS经典面试题155 - const,static,extern详解(面试必备) 一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽 ...

  4. 存储类型auto,static,extern,register的区别 <转>

    变量和函数的属性包括数据类型和数据的存储类别,存储类别指数据在内存中存储方式(静态和动态),包含auto,static,register,extern四种. 内存中.具体点来说内存分为三块:静态区,堆 ...

  5. const define static extern

    const const意味着"只读",欲阻止一个变量被改变,可以使用const关键字 const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p) define #define ...

  6. C语言的static和extern关键字

    我的博客:www.while0.com 如果A.c要包含B.c里的一个变量或函数,则在A.c中要用extern关键字声明.注意: ①如果是包含的B.c里的函数,则在A.c里声明的时候可以不写exter ...

  7. C语言-1.static 和 extern使用,2.文件,3.数据块读写

    1.static 和 extern使用, 1)修饰局部变量 static修饰局部变量特点:延长局部变量的生命周期 ,static修饰的局部变量只会被执行一次 extern不能修饰局部变量 2)修饰全局 ...

  8. C语言之Static

    1.全局静态变量 在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量. 1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在) 2)初始化:未经初始化的全局静态变量 ...

  9. 【粉丝问答10】C语言关键字static的使用详解

    视频地址:https://www.ixigua.com/6935761378816819748 粉丝提问 粉丝问题,总结一下: 关键字static的使用方法. 要想搞清楚关键字static的使用方法, ...

随机推荐

  1. ASP.NET mvc异常处理的方法

    第一种:全局异常处理 1.首先常见保存异常的类(就是将异常信息写入到文件中去) public class LogManager { private string logFilePath = strin ...

  2. winform自定义文件程序-- 不允许所请求的注册表访问权(ZSSQL)

    常见问题1: 不允许所请求的注册表访问权 win7.win8 双击程序文件ZSSQL时候会出现 不允许所请求的注册表访问权 的弹窗异常 解决方法:ZSSQL.exe 右键 属性--兼容性--以管理员身 ...

  3. Serv-U执行CMD命令

    site exec + 命令.比如关机: site exec shutdown -r -t 0 注意,网上很多教程在前面加了一个“quote”,实测根本无效,不知道那些教材是怎么回事. 执行方式有很多 ...

  4. ArcGIS 网络分析[1.5] 使用点线数据一起创建网络数据集(如何避免孤立点/点与线的连通性组合结果表)

    ArcGIS中最基本的三种矢量数据是什么?点线面. 网络中除了路网之外,还会有地物点. 如上图,我们在建立网络数据集的时候,作为实验,当然可以只是公路网.但是在大型的决策任务中,网络数据集就不只是公路 ...

  5. org.apache.jasper.JasperException: /pages/column.jsp (line: 8, column: 1) File "pathTags.jsp" not f

    1.错误描述 21-Mar-2015 00:57:40.934 INFO [localhost-startStop-2] org.apache.catalina.core.ApplicationCon ...

  6. 利用表格分页显示数据的js组件bootstrap datatable的使用

    前面展示了datatable的简单使用,还可以通过bootstrap结合datatable来使用,这样可以进一步美化datatable插件 <!DOCTYPE html> <html ...

  7. Storm存储结果至Redis

      原有的事务支持使用MemcachedState来进行,现在需要将其迁移至Redis,并且需要记录所有key值列表,因为在redis中虽然可以使用keys *操作,但不是被推荐的方式,所以把所有结果 ...

  8. IntelliJ IDEA使用技巧整理

    1 .写代码时用 Alt-Insert ( Code|Generate… )可以创建类里面任何字段的 getter 与 setter 方法. 2 .右键点击断点标记(在文本的左边栏里)激活速查菜单,你 ...

  9. DPDK中使用VFIO的配置

    VFIO VFIO是一个可以安全地把设备I/O.中断.DMA等暴露到用户空间(userspace),从而可以在用户空间完成设备驱动的框架.用户空间直接设备访问,虚拟机设备分配可以获得更高的IO性能. ...

  10. Java中的class为什么要设置访问控制?和C&plus;&plus;比较的感悟

    Java中的class为什么要设置访问控制?和C++比较的感悟 在Java中package解决了class的名字空间问题,class的成员都有各自的访问控制符,而class还有两种访问控制符,分别是p ...