为什么这段C代码可以编译?

2023-12-29

#include <stdio.h>
int main() {
    int c = c;
    printf("c is %i\n", c);
    return 0;
}

我正在定义一个名为的整数变量c,并且我将其值分配给自身。但这怎么能编译呢?c还没有初始化,那么如何给它自己赋值呢?当我运行程序时,我得到c is 0.

我假设编译器正在生成为分配空间的汇编代码c变量(当编译器遇到int c陈述)。然后它获取未初始化空间中的任何垃圾值并将其分配回c。这是正在发生的事情吗?


我记得在之前的回答中引用过这一点,但现在找不到。

C++03 §3.3.1/1:

名称的声明点紧接在其完整声明符(第 8 条)之后和其初始值设定项(如果有)之前,...

因此,变量 c 即使在初始化器部分之前也是可用的。

Edit:抱歉,您专门询问了 C;虽然我确信那里有一条等效的线。詹姆斯·麦克内利斯发现了它:

C99 §6.2.1/7:任何不是结构、联合或枚举标记的标识符“其范围在其声明符完成后开始”。声明符后面跟着初始化程序。

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

为什么这段C代码可以编译? 的相关文章

  • 我可以使用反射更改 C# 中的私有只读字段吗?

    我想知道 由于很多事情都可以使用反射完成 我可以在构造函数完成执行后更改私有只读字段吗 注 只是好奇 public class Foo private readonly int bar public Foo int num bar num
  • 如何知道并加载特定文件夹中的所有图像?

    我有一个应用程序 C Builder 6 0 需要知道特定文件夹中的图像总数 然后我必须加载它们 在 ImageList 或 ComboBoxEx 中 或任何其他控件中 我怎样才能做到这一点 我知道如何在控件中加载图像 或保存在 TList
  • 如何调试参数化 SQL 查询

    我使用 C 连接到数据库 然后使用 Ad hoc SQL 来获取数据 这个简单的 SQL 查询非常方便调试 因为我可以记录 SQL 查询字符串 如果我使用参数化 SQL 查询命令 有没有办法记录 sql 查询字符串以进行调试 我想就是这样的
  • 将 2D 数组映射到 1D 数组

    我想用一维数组来表示一个二维数组 函数将传递两个索引 x y 和要存储的值 这两个索引代表一维数组的单个元素 并相应地设置它 我知道一维数组需要具有 arrayWidth arrayHeight 的大小 但我不知道如何设置每个元素 例如 如
  • 实体框架代码优先 - 在另一个文件中配置

    使用 Fluent API 将表到实体的映射分开的最佳方法是什么 以便它全部位于单独的类中 而不是内联在 OnModelCreating 方法中 我目前在做什么 public class FooContext DbContext prote
  • 为什么C Clock()返回0

    我有这样的事情 clock t start end start clock something else end clock printf nClock cycles are d d n start end 我总是得到输出 时钟周期是 0
  • 浮点提升:stroustrup vs 编译器 - 谁是对的?

    在 Stroustrup 的新书 C 编程语言 第四版 第 10 5 1 节中 他说 在执行算术运算之前 整数提升用于从较短的整数类型创建整数 类似地 浮点提升是用于从浮点数创建双精度数 我用以下代码确认了第一个声明 include
  • 当我单击 GridView 项时返回 ImageView 实例

    当我点击GridView项时如何返回ImageView实例 我为 ItemClick 创建自定义绑定事件 public class ItemClickSquareBinding MvxBaseAndroidTargetBinding pri
  • 阅读 Stack Overflow RSS 源

    我正在尝试获取未回答问题的列表the feed https stackoverflow com feeds 但我在阅读时遇到困难 const string RECENT QUESTIONS https stackoverflow com f
  • C++ 在 Vector 中使用不可分配的对象

    我想将对象列表存储在std vector 但对象包含引用且无法分配给 但是 我可以复制构造该对象 我能想到的唯一选择是使用指针来包装对象并在需要分配指针时重新设置指针 但这样做的语法会显着降低可读性 特别是在使用迭代器时 我更喜欢另一种选择
  • 控制台应用程序 .net Core 2.0 的配置

    在 net Core 1 中我们可以这样做 IConfiguration config new ConfigurationBuilder AddJsonFile appsettings json true true Build 这样就可以使
  • glDrawElements 只绘制半个四边形

    这是我的功能 void Object draw2 if mIsInitialised return Tell OpenGL about our vertex and normal data glEnableClientState GL VE
  • 防止复制构造和返回值引用的分配

    如果我有一个函数返回对类实例的引用 但我无法控制其源 比如说list
  • 如何检测斑点并将其裁剪成 png 文件?

    我一直在开发一个网络应用程序 我陷入了一个有问题的问题 我会尝试解释我想要做什么 在这里您看到第一个大图像 其中有绿色形状 我想要做的是将这些形状裁剪成不同的 png 文件 并使它们的背景透明 就像大图像下面的示例裁剪图像一样 第一张图像将
  • 捕获当前正在播放的声音

    是否可以捕获计算机上当前播放的声音 如果能够将其保存为 mp3 就好了 但我认为这样做会存在一些法律问题 所以 wav 也可以 我环顾四周 有人建议使用虚拟音频线之类的东西 在 C 中捕获声音输出 https stackoverflow c
  • C#:如何使用 SHOpenFolderAndSelectItems [重复]

    这个问题在这里已经有答案了 有人可以举例说明如何使用 shell 函数吗SH打开文件夹并选择项目 http msdn microsoft com en us library bb762232 VS 85 aspx来自 C 我不太明白如何使用
  • 使用 Linq 进行异步Where过滤

    我有一个List通过填充的元素async调用 WebService 没问题 我需要过滤该列表以便在应用程序视图上显示某些内容 我试过这个 List
  • 使用 AutoMapper 进行 LINQ GroupBy 聚合

    试图让查询工作 但老实说不确定如何 或者是否可能 进行它 因为我尝试过的一切都不起作用 共查询6个表 Person PersonVote PersonCategory Category City FirstAdminDivision Per
  • 从 C# 中的 .NET SecureString 读取单个字符?

    WPF 的PasswordBox 返回一个SecureString 它对窥探者隐藏密码 问题是你最终必须获得密码的值 而我在网上找到的建议都涉及将值复制到字符串中 这会让你回到窥探者的问题 IntPtr bstr Marshal Secur
  • 在 C# 中读取/写入命令行程序

    我正在尝试与 C 的命令行程序进行对话 它是一个情绪分析器 它的工作原理如下 CMD gt java jar analyser jar gt Starting analyser 这是我想从我的 C 程序插入内容的地方 例如 I love y

随机推荐

  • 代码优先导致所需的关系是可选的?

    public class Client public Int32 ClientID get set public virtual ICollection
  • 将两个不同的 Get-ChildItem 调用的结果合并到单个变量中以对它们进行相同的处理

    我正在尝试编写一个 PowerShell 脚本来从多个目录构建文件列表 将所有目录添加到主列表后 我想对所有文件进行相同的处理 这就是我所拥有的 items New Object Collections Generic List IO Fi
  • 使用 CSS 取消选中复选框

    对于那些不熟悉的人来说 复选框的选中属性将接受任何输入作为选中该框的标志 事实上 它不需要任何文字 所以所有这些都会选中该框
  • 如何在 XAML windows 8 的行和列中显示数据

    在 Metro 风格的 Windows 8 应用程序中 我如何使用类似于此 https dl dropbox com u 59251888 img png image 的 xaml 显示数据 是否可以使用ListBox ListView G
  • HTMLPanel 上的 GWT UiHandler

    我正在编写一个带有以下标记的小部件
  • 更新 django 数据库以反映现有模型的更改

    我已经定义了一个模型并通过以下方式创建了其关联的数据库manager py syncdb 现在我已经向模型添加了一些字段 我尝试了syncdb再次执行 但没有输出出现 在尝试从我的模板访问这些新字段时 我收到 No Such Column
  • 如何通过 python 子进程与 mac 上的应用程序交互?

    我知道已经发布了类似的问题 但我见过的方法似乎都不起作用 我想在 mac 上使用 python 子进程启动应用程序 xfoil 并使用脚本向 xfoil 发送一堆命令 xfoil 是一个在终端窗口中运行的应用程序 您可以通过文本命令与其交互
  • C# 方法默认是密封的还是虚拟的?

    我知道的定义virtual and sealed关键字 但是如果您不将它们与方法一起使用 那么默认情况下可以覆盖该方法吗 我来自vb net背景 它在 vb net 中是这样的 来自 MSDN 如果未指定 Overridable 或 Not
  • 台式电脑上的 OpenGL|ES

    我正在开发一个 OpenGL 项目 我想将其移植到支持 OpenGL ES 的嵌入式系统 由于 OpenGL ES 是 OpenGL 的子集 在嵌入式系统上编译我的 OpenGL 应用程序有多难 假设我的OpenGL代码在OpenGL ES
  • 开发模式 - 其他用户制作的模板电子表格的副本

    当对主脚本 由另一个帐户拥有 进行更改时 包含处于开发模式的库的电子表格副本是否会立即更新 我创建了一个脚本 gt gt 保存了一个版本 gt gt 在电子表格中添加了一个库引用 在开发模式下 gt gt 制作了该ss的多个副本 在用于创建
  • 使用 php 获取窗口大小 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这段代码有什么问题 window width window height 任何想法 您的代码没有任何问题 但是您无法获取 PHP 变量中的
  • 将 mylyn Gitlab 连接器连接到 Eclipse 时出错

    我正在尝试为 Eclipse Oxygen v4 7 1a 配置 Mylyn Gitlab 连接器 但是当我尝试添加新任务时 它会抛出异常 并且不允许我继续创建新任务 正确输入我的数据和 gitlab 存储库的 url 地址 甚至使用多个
  • 使用sql查询总结时间列

    我有一张表如下 repID ClockIn ClockOut TotalHours 109145 7 50 50 AM 3 37 16 PM 7 46 26 109145 7 52 41 AM 3 44 51 PM 7 52 10 1091
  • C# 禁用 USB ReadPipe 的垃圾收集

    我正在尝试使用 FTDI 的 D3XX NET 从 USB 端口收集数据 收集数据 然后发送到快速傅立叶变换以绘制频谱 即使您丢失了一些数据 这也可以正常工作 你说不出来 但是 如果您随后想要将此数据发送到音频输出组件 您会发现数据丢失 这
  • 如何根据传入远程通知负载中定义的类别添加不同的操作?斯威夫特更新

    我正在我的两个相关应用程序中实现推送通知 到目前为止我能够发送通知 设备到设备以及主题 收到通知后 通知会显示随有效负载发送的 url 处的图像 我的目标是向主题通知添加操作 并且每个主题的操作都不同 Ej 行动为 shop promoti
  • 在 C# 中添加十六进制值

    在我的系统中 我需要添加 2 个十六进制值 那么 如何在 C 中添加十六进制值 我还想知道十六进制值的最大长度以及哪个实例保存这些值 C 支持十六进制文字 http msdn microsoft com en us library aa66
  • Haskell 中的惰性笛卡尔积

    我想在 Haskell 中生成一个相当大但有限的笛卡尔积 然后我需要对其进行迭代 想想平均场模型的配分函数 自然而然的事情使用sequence 像这样 l sequence replicate n 0 1 2 不幸的是 对于大n 这不适合内
  • 如何创建 android:pathData?

    所以我需要在我的应用程序中使用路径数据 有没有办法将已有的图像转换为路径数据 或者唯一的方法是使用 Photoshop 等实际计算所有像素 矢量图像android中的PathData是矢量图形程序的脚本 它并不是完全干净且人类可读的代码作为
  • 无法创建 yeoman web 应用程序

    当我尝试创建一个网络应用程序时 我得到了这个yeoman usr local lib node modules yo node modules insight node modules configstore configstore js
  • 为什么这段C代码可以编译?

    include