出名的网站建设软件wordpress登录 跳转
news/
2025/9/24 0:01:02/
文章来源:
出名的网站建设软件,wordpress登录 跳转,贵阳景观设计公司,百度seo网站优化怎么做1 声明和定义
声明就是告诉编译器有这个东西的存在#xff0c;而定义则是这个东西的实现。
对于变量来说#xff0c;声明就是告诉编译器存在这个名称的变量#xff0c;定义则是给这个变量分配内存并赋值#xff1a;
// 变量声明#xff0c;声明时不能赋值#xff0c;如…1 声明和定义
声明就是告诉编译器有这个东西的存在而定义则是这个东西的实现。
对于变量来说声明就是告诉编译器存在这个名称的变量定义则是给这个变量分配内存并赋值
// 变量声明声明时不能赋值如果进行赋值就是定义
extern int var;// 变量定义定义时可以为其赋值并且此时赋值是个好的习惯
int var 0;对于函数来说声明就是告诉编译器存在这个名称的函数定义则是这个函数的实现。
函数的声明就是给出函数的返回值、函数名和参数类型
// 函数声明
int add(int a, int b);// 函数定义
int add(int a, int b) {return a b;
}声明和定义的区分主要用于全局变量毕竟局部变量不需要区分声明和定义。需要记住的是全局范围内变量的声明可以有多个而定义只能有一个。
2 static
被static修饰的全局变量称为静态全局变量静态全局变量的作用域是当前文件也就是说不能使用extern关键字将该变量导入到其他文件访问。
如下示例
// module.h
#ifndef LUO
#define LUOstatic int var;#endif// module.cpp
#include iostream
#include module.hvoid func() {var 2;printf(var%d address%p\n, var, var);
}// main.cpp
#include iostream
#include module.hextern void func();int main() {func();printf(var%d address%p\n, var, var);
}将全局变量放到头文件中然后在两个文件中使用执行时可以发现两个变量的地址不一样也就是说虽然这个变量在两个文件中但是他们其实是不同的变量。
总之对于static的全局变量需要记住它们只能用在当前文件尽量不要放在头文件中因为头文件大概率是要被多个源文件引用的。
static不仅可以修饰全局变量还可以修饰局部变量当修饰局部变量时就修改了变量的声明周期它就不是存储在栈上而是存储在全局数据区。
#include iostreamvoid func() {static int a 0;a;printf(%d\n, a);
}int main() {func();func();
}这里将func()函数中的变量a用static修饰执行时会发现当下一次再次执行时a就是上次执行的值。这样的变量通常可以用于只在某个函数中使用全局变量也就是要求它的声明周期是全局的但是使用范围却是某个函数中。
对于函数而言用static修饰表明该函数只在当前文件中使用。
3 extern
前面已经说过extern通常用来声明变量和函数表明变量在其他地方定义此处只是告诉编译器有这个东西而已。
因此extern比较常用的方式就是在头文件中声明变量和函数
// module.h
#ifndef LUO
#define LUOextern int var;
extern void func();#endif// module.cpp
#include iostream
#include module.hint var 0;void func() {var 2;printf(var%d address%p\n, var, var);
}// main.cpp
#include iostream
#include module.hint main() {func();printf(var%d address%p\n, var, var);
}在头文件module.h中声明变量和函数然后在module.cpp中定义变量和函数最后在main.cpp中引入头文件就可以在main.cpp中使用变量和函数了。这种方式就是extern的常规用法。
当然对于这里的例子还可以直接将extern的变量和函数放到main.cpp中由链接器在链接阶段去查找
#include iostreamextern void func();
extern int var;int main() {func();printf(var%d address%p\n, var, var);
}extern的另一个用法就是链接C语言库。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914301.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!