当前位置: 首页 > wzjs >正文

宁波网站建设公司哪个好秦皇岛网站建设费用

宁波网站建设公司哪个好,秦皇岛网站建设费用,淘宝客cms网站模板下载,西安不动产查询房产信息网1. 声明与定义的区别 声明(declaration):向编译器表明某个变量(或其他实体)的类型与名字,使它在后续的编译过程中可见或可用。定义(definition):除了声明变量的名字和类…

1. 声明与定义的区别

  • 声明(declaration):向编译器表明某个变量(或其他实体)的类型与名字,使它在后续的编译过程中可见或可用。
  • 定义(definition):除了声明变量的名字和类型之外,还会为其分配存储空间,并可能进行初始化。

也就是说,声明 只告诉编译器“有这么个名字,这么个类型”;定义 则进一步表明“我要分配内存来存储这个变量(或实体),并可能给它一个初始值”。

在头文件或源文件中,可能会看到类似的代码片段:

// 声明了一个外部整型变量 j,但没有定义它(未分配存储空间)
extern int j;  // 定义了一个整型变量 i,并分配存储空间
int i;  // 另一种形式:在声明的同时给出初始值,也就相当于定义
extern double pi = 3.1416;  // 这是一个定义

1.1 extern 的使用

  • extern 关键字常用于声明一个在别处定义的变量。
  • 如果在 extern 声明中包含了初始值,例如 extern int x = 0;,那么这行语句就变成了变量的 定义(会分配存储空间并初始化),不再只是声明。

一般的规则是:

  1. 如果只是 extern int x; 而无初始化,这是一条声明。
  2. 如果写成 extern int x = 10;,那么即使加了 extern,也变成了定义。

注意:在函数体内部,试图给用 extern 修饰的变量加初始值是错误的做法,编译器会报错。

2. 分离式编译 (Separate Compilation)

C++ 支持将一个程序拆分为多个源文件(.cpp/.cxx 等),最后通过链接器将各个目标文件(.o/.obj)组合为可执行程序。这样做可以:

  • 明确逻辑划分,降低代码耦合;
  • 缩短编译时间,因为只有修改过的源文件才需要重新编译。

然而,不同源文件之间如果需要共享变量,就必须让编译器知道该变量的存在及其类型。这就需要分离“声明”和“定义”:

  • 一个 源文件中,定义该变量并分配存储空间。
  • 在其他需要使用该变量的源文件中,使用 extern 声明它。

2.1 示例

假设我们有两个源文件:main.cpputils.cpp,以及一个头文件 externs.h 用于声明公共变量。

// externs.h
#ifndef EXTERNS_H
#define EXTERNS_Hextern int globalCounter;  // 声明:在别处会有一个 int 类型的 globalCounter 变量#endif
// utils.cpp
#include "externs.h"int globalCounter = 0; // 定义:这里真正分配了 globalCounter 的存储空间void incrementCounter() {++globalCounter;
}
// main.cpp
#include <iostream>
#include "externs.h"// 声明在 externs.h 中,直接使用
int main() {std::cout << "globalCounter = " << globalCounter << std::endl;incrementCounter(); // 调用 utils.cpp 中定义的函数std::cout << "globalCounter = " << globalCounter << std::endl;return 0;
}
  • externs.h:只包含对 globalCounter 的声明(带 extern),并没有分配空间。
  • utils.cpp:包含 externs.h,并定义了 globalCounter(分配空间并初始化为 0)。
  • main.cpp:同样包含 externs.h,可以直接使用 globalCounter,但不需要也不应该重复定义它。

通过这样的分离式编译,我们就实现了在多个文件之间安全共享同一个全局变量。

3. C++ 的静态类型

C++ 是一种 静态类型(statically typed)语言,在编译阶段会进行 类型检查(type checking)。这意味着编译器需要在编译时就知道每个变量的类型,并确保代码中使用它们的方式是合法的:

  • 你不能对一个字符串类型执行整数加法运算;
  • 你不能在不合适的上下文中把浮点数当作指针使用;
  • 等等。

3.1 静态类型的优势

  • 及早发现错误:因为类型检查在编译阶段进行,如果有类型不匹配或不允许的操作,编译器就会报错并拒绝生成可执行文件。
  • 代码可读性强:在使用变量之前必须声明其类型,便于读者理解变量的用途与操作范围。
  • 编译器优化:编译器在知道所有类型信息的情况下,往往能更充分地进行优化。

在编写 C++ 程序时,如果没有恰当地声明变量的类型,就会导致编译错误或未定义行为。


4. 小结

  1. 声明 vs. 定义

    • 声明:告诉编译器某个名字和类型的存在(不分配空间,除非带初始值)。
    • 定义:在声明的基础上分配存储空间,并可进行初始化。
  2. 分离式编译

    • 一个大型项目通常被拆分为多个源文件。
    • 当需要在多个源文件间共享变量时,必须在其中一个文件中定义变量,在其他需要使用它的文件中声明它(用 extern 关键字)。
    • 重复定义会导致链接错误,而仅声明则能让编译器知道该名字的存在。
  3. 静态类型

    • C++ 在编译阶段进行类型检查,确保对变量的使用合法。
    • 在使用变量之前必须声明其类型;只有知道类型后,编译器才能对操作的合法性进行判断。

通过理解 声明定义 的区别,以及 静态类型 的编译特性,我们就能更好地处理 C++ 工程中的全局变量、头文件、源文件的结构组织,为分离式编译打下扎实的基础。

参考资料

  • 其他 C++ 参考文档或权威书籍中的 “声明与定义” 章节

以上就是本篇对 C++ 变量声明与定义 以及 分离式编译 相关概念的介绍和示例,希望能对你理解 C++ 的编译模型有所帮助,祝编程愉快!

http://www.dtcms.com/wzjs/553863.html

相关文章:

  • 兰州网站建设ulezhi泰州网页设计需要多少钱
  • 直接用ip做网站网站建设怎么做账
  • wordpress新站SEO优化关于网站开发人员的薪资
  • 网站开店前的四项基本建设中国铁路监理建设协会网站
  • 公司如何建设网站首页网站建设和运营的成本是多少钱
  • 整站seo教程网站历史频道怎么做
  • 如何查看一个网站的访问量红玫瑰直播免费版视频
  • 重新做网站网站建设的时间
  • 甘肃网络公司网站建设网站建设项目步骤
  • 唐山市城市建设档案馆网站个人学做网站
  • 做网站哪里婚庆公司网站源码
  • 5个制造企业电子商务网站苏州到深圳物流公司
  • html网站免费模板网站建设目标责任
  • win7局域网网站开发应用公园app官方下载
  • 西安培训网站建设网站收录提交入口网址
  • 常见网站结构北京app软件开发
  • 专业做婚纱摄影网站wordpress接收邮件
  • 网站后期天津市城乡建设网站
  • php网站开发权限管理吴江建设银行网站
  • 做招标代理应关注的网站wordpress 小说模版
  • 珠海手机微信网站建设小程序开发商城网站开发平台
  • 揭阳网站制作建设购物网站开发会遇到的的问题
  • 网站建设"淘宝网" 在颜色选取和搭配方面有哪些值得学习的地方.怎么做qq空间支付网站
  • 北碚网站建设公司投资公司名字
  • wordpres做影视网站基础网页制作流程
  • 免费的汽车网站源码电脑怎样重新装wordpress
  • 如何更新网站缓存怎么制作营销网站
  • 网站报备流程吉林市网站建设优化
  • tp框架网站开发参考文献网站数据库名称怎么改
  • 网站模板文件的名字wordpress侧边栏工具