重复的 typedef - 在 C 中无效但在 C++ 中有效?

2024-03-24

我想要一个标准参考,为什么以下代码会触发 C 中的合规性警告(使用gcc -pedantic; “typedef 重新定义”),但在 C++ 中没问题(g++ -pedantic):

typedef struct Foo Foo;
typedef struct Foo Foo;

int main() { return 0; }

为什么我不能定义一个typedef在C中反复?

(这对于 a 的标头结构具有实际意义.)


为什么它能在 C++ 中编译?

因为 C++ 标准明确这么说。

参考:

C++03 标准 7.1.3 typedef 说明符

§7.1.3.2:

在给定的非类作用域中,typedef 说明符可用于重新定义在该作用域中声明的任何类型的名称,以引用它已引用的类型。

[例子:
typedef struct s { /* ... */ } s;
typedef int I;
typedef int I;
typedef I I;
—结束示例]

为什么在 C 语言中编译失败?

typedef名称没有链接,并且 C99 标准不允许没有链接规范的标识符在相同范围和相同名称空间中具有多个声明。

参考:

C99 标准:§6.2.2 标识符的链接

§6.2.2/6 states:

以下标识符没有链接:声明为除以下内容之外的任何标识符 一个对象或一个函数;声明为函数参数的标识符;块作用域 未使用存储类说明符声明的对象的标识符。

Further §6.7/3 states:

如果标识符没有链接,则在相同范围和相同命名空间中不得有超过一个标识符声明(在声明符或类型说明符中),但 6.7.2.3 中指定的标签除外。

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

重复的 typedef - 在 C 中无效但在 C++ 中有效? 的相关文章

  • 具有不同大小结构的结构数组的 malloc()

    如果每个结构都包含一个大小不同的字符串数组 那么如何正确地 malloc 一个结构数组 因此每个结构可能有不同的大小 并且不可能 realloc 结构体数量 sizeof 结构体名称 after malloc 初始大小 sizeof 结构名
  • Subversion 和 Visual Studio 项目的最佳实践

    我最近开始在 Visual Studio 中处理各种 C 项目 作为大型系统计划的一部分 该系统将用于替换我们当前的系统 该系统是由用 C 和 Perl 编写的各种程序和脚本拼凑而成的 我现在正在进行的项目已经达到了颠覆的临界点 我想知道什
  • CultureInfo 的实例(来自相同的文化)根据操作系统而变化

    我有一个网站 上面写着这样的日期 CultureInfo cultureInfo CultureInfo GetCultures CultureTypes AllCultures FirstOrDefault c gt string Equ
  • C++中delete和delete[]的区别[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的删除与删除 运算符 https stackoverflow com questions 2425728 delete vs delete operators in c 我写了一个包含两个指针的
  • 在 C# Winforms 应用程序中嵌入 Windows XP 主题

    我有一个旧版 C Windows 窗体应用程序 其布局是根据 Windows XP 默认主题设计的 由于需要将其作为 Citrix 应用程序进行分发 该应用程序现在看起来像经典主题应用程序 因为 Citrix 不鼓励使用主题系统服务 所以
  • 从 C 结构生成 C# 结构

    我有几十个 C 结构 我需要在 C 中使用它们 典型的 C 结构如下所示 typedef struct UM EVENT ULONG32 Id ULONG32 Orgin ULONG32 OperationType ULONG32 Size
  • SFINAE 如何使用省略号?

    过去 当使用 SFINAE 选择构造函数重载时 我通常使用以下内容 template
  • 对 boost 库的依赖项没有完整路径

    我已经成功构建了动态库 依赖于使用自定义前缀构建和安装的 boost 库 b2 install prefix PREFIX 然而 当我跑步时otool L在我的库中 我得到如下输出 libboost regex dylib compatib
  • 将带有 glut 的点击坐标添加到向量链接列表中

    我想创建一个向量链接列表 并在 GLUT 库的帮助下获取点击的位置并将它们附加到链接列表中 这些是我写的结构 typedef struct vector int x int y Vector typedef struct VectorLis
  • 如何在 C++ 中将 CString 转换为 double?

    我如何转换CString to a double在 C 中 Unicode 支持也很好 Thanks A CString可以转换为LPCTSTR 这基本上是一个const char const wchar t 在 Unicode 版本中 知
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • 默认析构函数做了多少事情

    C 类中的默认析构函数是否会自动删除代码中未显式分配的成员 例如 class C public C int arr 100 int main void C myC new C delete myC return 0 删除 myC 会自动释放
  • asp.net网格分页的SQL查询

    我在用iBatis and SQLServer 使用偏移量和限制进行分页查询的最佳方法是什么 也许我添加该列ROW NUMBER OVER ORDER BY Id AS RowNum 但这只会阻止简单查询的数据访问 在某些情况下 我使用选择
  • WPF。如何从另一个窗口隐藏/显示主窗口

    我有两个窗口 MainWindow 和 Login 显示登录的按钮位于主窗口 this Hide Login li new Login li Show 登录窗口上有一个检查密码的按钮 如果密码正确 我如何显示主窗口 将参数传递给 MainW
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • Visual Studio 2017 完全支持 C99 吗?

    Visual Studio 的最新版本改进了对 C99 的支持 最新版本VS2017现在支持所有C99吗 如果没有 C99 还缺少哪些功能 No https learn microsoft com en us cpp visual cpp
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • C++、三元运算符、std::cout

    如何使用 C 用三元运算符编写以下条件 int condition1 condition2 condition3 int double result int or double std cout lt lt condition1 resul
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过
  • 如何使用 C# 以低分辨率形式提供高分辨率图像

    尝试使用 300dpi tif 图像在网络上显示 目前 当用户上传图像时 我正在动态创建缩略图 如果创建的页面引用宽度为 500x500px 的高分辨率图像 我可以使用相同的功能即时转换为 gif jpg 吗 将创建的 jpg 的即将分辨率

随机推荐

  • gdb:显示源代码和asm中的相应行

    在 TUI 模式下运行 gdb 并显示源代码和汇编时 是否有一个选项可以突出显示映射到选定源代码行的指令集 您可以使用 GDB Dashboard 部分完成此操作 https github com cyrus and gdb dashboa
  • C# NetworkStream - 在读取时区分关闭套接字和 0 字节数组

    已解决 该问题基于错误的假设 在使用 TCP 时 我遇到了 NetworkStream Read 在两种不同情况下返回值 0 的问题 我很难区分 一些背景知识 我有一个有效的客户端 服务器解决方案 使用长度前缀消息通过 TCP 进行通信 然
  • 使用 Create React App 和 TypeScript 进行 Jest 测试时出现isolatedModules错误?

    我已经使用 typescript 启动了一个 Create React App 项目 当我编写测试时 我收到编译器错误 something test tsx test something gt expect 1 toBe 1 错误是 TS1
  • select2 插件不在 jquery 模式对话框内时工作正常

    我在 jquery 对话框中使用 select2 插件 但不起作用 当下拉时 焦点移动到输入控件 但立即离开它 不允许我输入任何内容 这是 HTML div title Asignar servicios a usuarios div
  • C# tableLayoutPanel 滚动除顶行之外的所有内容

    我正在使用 winforms 和 C 并查看 TableLayoutPanel 是否可以在大桌子上有滚动条 但不能让顶行滚动 这与 Excel 中 冻结窗格 选项的工作方式类似 我只想冻结顶行而不是其他任何东西 另外 我的桌子足够大 我还有
  • AWS lambda:pty 设备不足

    我尝试在 AWS lambda 中使用 pexpect 库 但收到以下错误 ERROR OSError out of pty devices 事实证明 任何包含 pty spawn 的代码都会在 lambda 中失败 下面是失败的 lamb
  • Android Paging 3 - 从 PagingData 对象获取数据列表

    我正在使用新的 jetpack Paging 3 库 我有一个特定的用例 我想使用视图模型在两个屏幕之间共享这些数据 一个屏幕需要分页数据 对于第二个屏幕 我想要此数据的简单列表 不是分页列表 我需要使用该列表 我不想在 PagingDat
  • R/Shiny 中的 Plain Dygraphs JavaScript 选项

    有没有办法在 R 中使用普通 Dygraphs JavaScript 选项 更具体地说是 Shiny http dygraphs com options html http dygraphs com options html 我觉得JS h
  • 更改actionBar下拉背景颜色

    如何更改显示 添加联系人 和 关于 的背景颜色 现在有点灰色 但我希望它是白色的 这是一个带有下拉菜单的操作栏 而不是旋转器 我不使用那个actionbarsherlock 的东西 例如 您现有的父母Style定义 仅添加android p
  • 如何在 MATLAB 中编写函数

    我想写一个返回值的函数f y 对于任何值y f y tan sin y sin tan y 如何在 MATLAB 中将其编写为函数 这是一个适合您目的的示例函数 function y f x y tan sin x sin tan x en
  • numpy.chararray 发生了什么

    Input chararr np chararray 3 5 chararr a chararr Output chararray b a b a b a b a b a b a b a b a b a b a b a b a b a b
  • 如何将字符串转换为 ifstream

    我正在尝试使用 ifstream 打开一个文件 并且想使用字符串作为路径 我的程序创建一个字符串路径 它会编译但保持空白 string path NameOfTheFile it would be something close to c
  • 谷歌地理编码 API 的计费问题

    计费已添加到我们的 gmaps api 项目中 而且该账单肯定会传播 因为它是在大约 4 周前添加的 在项目仪表板中 计费显示为可用 但是 当我们尝试调整配额时 它说我们需要激活计费 我们联系了 Google 的几乎所有渠道 并被告知完全没
  • CSS 多重文本装饰

    我想要拥有 h2 下划线同时闪烁 有没有办法只修改CSS样式来实现这一点 h2 例如 h2 text decoration underline blink or h2 text decoration underline text decor
  • 将 ereg_replace 替换为 preg_replace [重复]

    这个问题在这里已经有答案了 您好 需要更改功能ereg replace theData 到 preg replace To port ereg replace to preg replace你需要将正则表达式放在一对之间分隔符 你的正则表达
  • 特别分发:无法安装应用程序

    我正在开发一个ios应用程序 仅适用于iphone 并试图让其他人测试它 我通过临时分发在自己的设备上安装该应用程序没有问题 当我尝试在另一个人的设备上安装时 它总是失败 并显示消息 此时无法安装 xxxxx 我正在使用 xcode 5 以
  • Jython 不会将 PYTHONPATH 加载到 sys.path 中

    根据我读到的内容 sys path 应该由 PYTHONPATH 设置 在 Python 中 它是这样工作的 但在 Jython 中则不然 我可以绕过 Dpython path 但我想知道为什么 Jython 表现不佳 qa Scantro
  • 在 Visual Studio 2010 中使用正则表达式查找和替换来小写

    我正在使用 Visual Studio 2010 中的查找和替换功能来更改字段的编码样式 所有实例类似于 m MyField 应该 myField 但我只能设法得到 MyField using Find what m a zA Z Repl
  • 无法安装 sqlite3-ruby gem

    我已经安装了 xcode 3 0 我需要安装 sqlite3 ruby gem 用于 rhosync 当我跑步时 sudo gem install l sqlite3 ruby 我收到以下错误 Building native extensi
  • 重复的 typedef - 在 C 中无效但在 C++ 中有效?

    我想要一个标准参考 为什么以下代码会触发 C 中的合规性警告 使用gcc pedantic typedef 重新定义 但在 C 中没问题 g pedantic typedef struct Foo Foo typedef struct Fo