C语音中,static 关键字的用法.两个疑问

xiaoxiao2025-10-21  6

static修饰全局变量只能在本文件中使用。如果一个全局变量,它既可以在本源文件中被访问到,也可以在同一个工程的其它源文件中被访问就需要用到extern.

// ------ file: m.c #include <iostream> extern void print1(); extern void print2(); int main() { print1(); print2(); } // ---- file: c1.c #include "x.h" #include <iostream> void print1() { a = 1; std::cout << __FILE__ << "a is " << a << std::endl; } // ---- file: c2.c #include "x.h" #include <iostream> void print2() { std::cout << __FILE__ << "a is " << a << std::endl; } // ------ file: x.h #ifndef XXX #define XXX static int a = 123; #endif

用g++ m.c c1.c c2.c -o m编译,生产m可执行文件. 输出: $ ./m c1.ca is 1 c2.ca is 123

有两个疑问? 1,为什么 c1.c 中,a没有声明,怎么能被赋值呢? 2. print2() 打印出来的为什么不是1呢? 解决了 在C系统的编程语言中,#include是为了声明在这个地方插入别的文件中的代码。 将#include展开后,在每一.c文件中都会存在a变量. 都是相互独立的. 都是存在不同的文件中. https://bbs.csdn.net/topics/392467558

转载请注明原文地址: https://www.6miu.com/read-5038335.html

最新回复(0)