关于暂定定义

2023-12-13

我从一本关于暂定定义的书中读到,

暂定定义是没有任何外部数据声明 存储类说明符并且没有初始值设定项。暂定定义 如果翻译单元的结尾是 已达到并且没有出现带有初始化程序的定义 标识符

请解释一下上面这句话的意思。 另外,声明和定义之间的区别?我因此而陷入混乱。 :( 为什么这个程序没有给出错误:

#include <stdio.h>

int a;      //Tentative definition
int a;      //similarly this declaration too.
int main()  //not getting any error with this code why its so?
{
    printf("hi");
} 

另外,这段代码有什么问题:

#include<stdio.h>
printf("Hi");
int main(void){
    return 0;
}

一个变量宣言说,“程序中有一个具有以下名称和类型的变量”。

一个变量定义说:“亲爱的编译器先生,请立即为具有以下名称和类型的变量分配内存。”

所以同一个变量可以有多个声明,但只能有一个定义。

在 C 中,纯声明(也不是定义)前面带有关键字extern。因此,由于您的第一个示例中没有此关键字,因此您拥有的是两个定义。从表面上看,这似乎是一个问题(实际上是 C++ 中的错误),但 C 有一个特殊的“暂定定义”规则,该规则允许在同一翻译单元中对同一变量进行多个定义,只要它们都定义即可匹配并且至多有一个初始化器。 C 编译器在幕后将所有暂定定义组合成一个定义。

您是否尝试初始化这两个定义,如下所示:

int a = 1;
int a = 2;

那么你就会遇到错误。

你的第二个问题更简单。在 C 中,您根本无法在函数体之外拥有可执行语句。这是不允许的。想一想:如果允许的话,您预计它什么时候运行?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于暂定定义 的相关文章

  • 运行应用程序时.NET 3.5 JIT 不工作

    以下代码在 Visual Studio 内部运行该版本和在 Visual Studio 外部运行该版本时提供不同的输出 我正在使用 Visual Studio 2008 并面向 NET 3 5 我也尝试过 NET 3 5 SP1 在 Vis
  • 获取 TextBox 中的文本行数

    我试图通过标签显示文本框中的文本行数 但是 问题是如果最后一行为空 标签必须显示没有空行的行号 例如 如果它们有 5 行 最后一行为空 则标签应将行数显示为 4 Thanks private void txt CurrentVinFilte
  • 如何向WebRequest添加参数?

    我需要从 Web 服务调用一个方法 所以我编写了以下代码 private string urlPath http xxx xxx xxx manager string request urlPath index php org get or
  • C# 中直接从 URL 获取图像尺寸

    我正在尝试使用以下代码直接从网络上获取图片的尺寸 string image http www hephaestusproject com csharp3 png byte imageData new WebClient DownloadDa
  • C++ 中的“int”默认是“signed long int”吗?

    Is int默认情况下signed long int in C 它是否依赖于平台和 或编译器 如果是这样 怎么办 EDIT 以下任何一项是否保证是重复的 signed short int signed int signed long int
  • BufferBlock 连续

    我想使用以下方式实现消费者 生产者模式BufferBlock
  • 是否有可能将 *.pdb 文件包含到发布版本中以查看错误行号?

    我做了一个项目 所有设置都是默认的 当我在调试模式 构建配置 调试 下运行它并遇到异常时 它转储到我的自定义日志记录机制 其中包含错误行号 但是当我运行发布构建时 记录相同的异常 没有行号 只有方法抛出和记录调用堆栈 是否有可能在发布配置
  • 使用 GCHandle 将大型结构数组从 C# unity 脚本传递到 C++ dll 在 C++ 函数执行后崩溃

    我想从 C unity 脚本将结构数组传递给 c 本机插件 我做了如下操作 我可以访问数据 但我的应用程序在执行 c 函数后崩溃 我不知道为什么 C side StructLayout LayoutKind Sequential publi
  • std::bind2nd 和 std::bind 与二维数组和结构数组

    我知道 C 有 lambda 并且 std bind1st std bind2nd 和 std bind 已弃用 然而 从C 的基础开始 我们可以更好地理解新特性 所以 我从这个非常简单的代码开始 使用int 数组s 第一个例子 与std
  • C语言中没有循环可以打印数组吗?

    例如 在Python中 如果我们将一个列表作为数组 它会直接用一行代码打印整个数组 有什么办法可以用C语言实现同样的事情吗 简短回答 No 对表格上几乎所有问题的简短回答 用 C 语言做 X 工作能像用 Python 一样简单吗 No 长答
  • C# 实体框架我们应该使用 POCO.Id 还是仅使用 POCO 设置关系?

    我在服务方法中遇到一种情况 将 POCO 分配为另一个 POCO 的子对象无法按预期工作 我正在使用实体框架 4 public void ChangeOrderCurrency Currency currency order Currenc
  • 应用新设置时如何防止 GraphicsDevice 被丢弃?

    我的游戏窗口允许手动调整大小 这意味着它可以像任何其他普通窗口一样通过拖动其边缘来调整大小 游戏还利用了RenderTarget2D rt2d 在主 Draw 方法中设置主渲染目标 GraphicsDevice SetRenderTarge
  • 多线程 - 比单线程慢

    当我使用多个线程而不是单线程运行程序时 它会变慢 不是应该更快吗 该程序应该遍历从起始目录开始的所有目录 并查找并打印所有名为 X 的文件 代码如下 while done pthread mutex lock lock if list is
  • += 运算符在 C++ 中是如何实现的?

    这是我一直在思考的一个问题 但从未找到任何资源来说明这个问题的答案 事实上它不仅是为了 也适用于它的兄弟姐妹 即 等等 当然不是 考虑这个例子 int a 5 a 4 this will make a 9 现在考虑等效表达式 a a 4 T
  • 为什么 rand() 总是返回相同的值? [复制]

    这个问题在这里已经有答案了 可能的重复 在C中生成随机数 https stackoverflow com questions 3067364 generating random numbers in c 使用 rand 生成随机数 http
  • 从二进制文件读取字节到 long int

    我有两个问题 我有二进制文件的数据 我想使用 read 函数读取前 8 个字节以签署 long int 但我不能 你知道我该怎么做吗 如何直接读取一块数据到字符串中 我可以像所示那样阅读吗 前任 ifstream is is open te
  • 重定向 std::cout

    我需要一个类 在其对象的生命周期内将一个 ostream 重定向到另一个 ostream 经过一番修补后 我想出了这个 include
  • 如果项目包含多个文件夹,如何使用 Add-Migration

    我想Add Migration使用我的 DbContext 但出现错误 The term add migration is not recognized as the name of a cmdlet function script fil
  • 文本框中“结束编辑”的事件

    我正在 winform c 中使用文本框 并使用文本在数据库中进行查询 但每次文本更改时 我都需要不断查阅文本框的文本 因此 对于这些 我使用 KeyUp 但这个活动太慢了 文本框编辑完成后是否会触发任何事件 我考虑完成2个条件 控制失去焦
  • 检查另一种形式的线程是否仍在运行

    我有一个涉及两个窗体的 Windows 窗体应用程序 子表单用于将数据导出到 CSV 文件 并使用后台工作者写入文件 当这种情况发生时 我隐藏了表格 当后台工作程序运行时 父窗体仍然处于活动状态 因此即使后台工作程序正在写入文件 用户也可以

随机推荐

  • android中应用程序升级到新版本时如何保留全局变量?

    在我的 Android 应用程序中 用户必须通过同意提供电子邮件 ID 的条款和条件来注册 如果用户将应用程序升级到下一个版本 我不应该收到协议页面或电子邮件注册窗口 我使用全局变量控制它 但如果用户将应用程序升级到较新的版本 全局变量将被
  • PHP:使用 simplexml 循环遍历 XML 文件的所有级别

    我有一个函数 它使用 simplexml 返回 XML 文件中的第一级节点并将其写入无序列表 function printAssetMap xml simplexml load file X ASSETS assets xml gt ass
  • 如何选择sql复杂查询where Condition And or [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我的桌子是 ID ATTRID VALSTR 1771373 1 1234 1771373 3 510 1771373 7 2016 1771373 8 05 1777623 3 50
  • codeIgniter使用mysql_real_escape_string()代替。数据库连接问题

    我在带有数据库的服务器上安装了代码点火器 我想在我的 mac 上运行相同的数据库 我使用 MAMP 并将项目文件夹复制到 htdocs 中 但出现此错误 请你帮帮我好吗 ErrorException 8192 mysql escape st
  • Angular 2:无法绑定到“ngModel”,因为它不是“input”的已知属性

    我正在尝试在 Angular 2 中实现动态表单 我向动态表单添加了删除和取消等附加功能 我已经遵循了这个文档 https angular io docs ts latest cookbook dynamic form html 我对代码做
  • 无法在 azure 机器学习服务工作区中注册 ONNX 模型

    我尝试以两种不同的方式将 ONNX 模型注册到 Azure 机器学习服务工作区 但遇到无法解决的错误 第一种方法 通过 Jupyter Notebook 和 python 脚本 model Model register model path
  • Matplotlib 类似于 matlab trisurf

    长话短说 我想用 python 绘制一个通用的 3D 三角形网格 Matplotlib 似乎是理想的候选者 但我会选择任何可以实现我将要描述的功能的 3D 渲染 假设我有一个由 X Y 和 Z 定义的三角形网格 点云的 3D 坐标 每个长度
  • Android - SSL/TLS 和 ECC(椭圆曲线加密)

    我正在开发一个与网络服务器通信的 Android 应用程序 我们使用 HTTPS 进行此通信 并且 Android 应用程序内还有一个客户端证书用于身份验证 我们使用 ECC ANSI x9 62 创建 SSL 证书 以便拥有非常小的证书
  • Opencv dll问题

    我正在遵循使用 opencv 进行对象检测的教程 我一步一步完成 但是当我运行它时 我收到此错误 The program can t start because opencv 244d dll is missing from your co
  • AVAudioSession :麦克风耳机作为输入,iPhone扬声器作为输出

    使用iOS10 有更多的可能性来管理AUdioSession 但我无法在音频通过iPhone扬声器发出时保持耳机麦克风作为输入 下面的 overrideOutputAudioPort 方法还将输入音频端口覆盖为 iphone 麦克风 let
  • Wpf面板后台问题

    当我不设置面板背景时 我无法获取鼠标事件 为什么有这种行为 我可以通过将背景设置为透明 默认情况下为空 来获取面板上的鼠标事件 空背景和透明背景有什么区别 When Background null它在渲染时不会向 MILCore 发出任何绘
  • Azure Analysis Services 是否支持服务主体登录 SQL Azure

    我有一个 Azure Analysis Services 模型 使用以下连接字符串从 SQL Azure 读取数据 Data Source MySQLAzureDB database windows net Initial Catalog
  • 不使用ros编译roscpp(使用g++)

    我正在尝试在不使用ROS其余部分的情况下编译roscpp 我只需要订阅一个节点 但该节点拥有使用旧版本ROS的节点 并且由于编译问题 我无法将我的程序与他的程序集成 我从git下载了源代码 https github com ros ros
  • 从 C# 执行多行 PowerShell 脚本

    我是 PowerShell 新手 我正在尝试从 C 执行 PowerShell 脚本 我编写的 PS 脚本将 xml 文件从主机 运行 PS 脚本 传输到远程计算机 脚本如下 Username User Password Pass Secu
  • 如果steps_per_epoch不适合样本数量怎么办?

    使用 Kerasfit generator steps per epoch 应等于可用样本总数除以batch size 但是发电机或fit generator如果我选择一个batch size不适合样本中的 n 次 是否会产生样本直到无法填
  • microsoft.office.tools.excel.dll 安装在哪里?

    我已经安装了带 NET 4 0的VS2010 SP1 但找不到microsoft office tools excel dll所在的位置 问题 gt 在哪里可以找到这个 DLL 通常 一旦安装了该程序集 该程序集就应该位于 GAC 中Off
  • 如何在 CMFCEditBrowseCtrl::EnableFileBrowseButton 中设置默认文件扩展名?

    如何在 CMFCEditBrowseCtrl EnableFileBrowseButton 中给出默认文件扩展名 应该如何传递参数 我尝试像下面的代码 CMFCEditBrowseCtrl py file path py file path
  • Java中将字符串拆分为等长子字符串

    如何分割字符串 Thequickbrownfoxjumps Java 中相同大小的子字符串 例如 Thequickbrownfoxjumps 4 个相同大小的应该给出输出 Theq uick brow nfox jump s 类似问题 Sc
  • PhantomJS open() 太慢

    我在 NodeJS 中进行网页抓取时遇到问题 我想从远程网页获取一些数据 但数据已从 javascript 插入到 html 中 我开始使用 PhantomJS 它运行得很好 除了一件事阻碍了我完成工作 PhantomJS 运行速度太慢 这
  • 关于暂定定义

    我从一本关于暂定定义的书中读到 暂定定义是没有任何外部数据声明 存储类说明符并且没有初始值设定项 暂定定义 如果翻译单元的结尾是 已达到并且没有出现带有初始化程序的定义 标识符 请解释一下上面这句话的意思 另外 声明和定义之间的区别 我因此