C++ 和 C 中的命名空间

2024-03-18

并不是说我会ever在我的专业工作中编写如下代码,以下代码在c++和c中是合法的并且编译时没有警告:

#include <stdlib.h>

typedef struct foo { int foo; } foo;

foo * alloc_foo () {
   return (struct foo*) malloc(sizeof(foo));
}   

struct foo * alloc_struct_foo () {
   return (foo*) malloc(sizeof(struct foo));
}   


foo * make_foo1 (int val) {
   foo * foo = alloc_struct_foo (); 
   foo->foo = 0;
   return foo;
}

struct foo * make_foo2 (int val) {
   struct foo * foo = alloc_foo();
   foo->foo = 0;
   return foo;
}

C 标准第 6.2.3 节使这在 C 中合法且明确:

6.2.3 标识符的命名空间
如果特定标识符的多个声明在翻译单元中的任何一点可见,则句法上下文会消除引用不同实体的使用的歧义。因此,不同类别的标识符(标签名称;结构、联合和枚举的标签;结构或联合的成员;以及普通标识符)有单独的名称空间。

请注意,由于标签名称存在于自己的名称空间中,我可以通过使用标签使代码更加混乱foo某处。

添加以下代码,代码无法编译:

int foo (foo * ptr) {
   return ++ptr->foo;
}   

那么,有两个问题,一个与 C 和 C++ 相关,另一个与 C++ 相关。

  • C/C++问题:为什么我不能定义函数foo?
    看来我应该能够定义该函数foo;函数名和变量名是“普通标识符”。但是如果我添加最后一点代码我会得到error: redefinition of 'foo' as different kind of symbol.
    问题:foo * foo;完全合法,那为什么不呢int foo (foo*); legal?

  • C++ 问题:这在 C++ 中是如何工作的?
    “命名空间”的含义在 C++ 中与在 C 中具有相当不同的含义。我在 C++ 标准中找不到任何谈论 C 命名空间概念的内容,这使得上述内容在 C 中合法。
    问题:是什么使得这在 C++ 中合法(首选章节)?


foo * foo;是完全合法的,那么为什么 int 不呢foo (foo*); legal?

因为已经有一个名为的类型foo在与您的函数相同的声明上下文中。同一作用域中不能有同名的类型和函数。

这在 C++ 中是如何工作的?

因为您可以在嵌套范围内隐藏名称。当你声明foo * foo, 首先foo指类型。第二foo声明一个变量——此时,类型foo被隐藏。尝试声明foo * baz after foo * foo,它应该失败。

struct foo {};

void test() {
   foo * foo; // first `foo` is the type, second `foo` is the variable
   foo * baz; // first `foo` is the variable
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 和 C 中的命名空间 的相关文章

  • 如果异常保存在 std::exception_ptr 中,那么在 catch 语句之外使用异常是否安全?

    我有一个std exception ptr其中有一个例外 我要调用std rethrow exception要获取实际的异常 catch 语句之后的异常是否有效 我的猜测是 因为我仍然持有std exception ptr它仍然有效 参见示
  • 有没有办法将所有内容都包含在 dbcontext 中?

    当查询一个DbContext急切加载时 需要Include Navigation 为了填充导航属性 然而 在某些情况下 我想简单地Include all实体的导航属性 有没有办法做到这一点 或者有办法做到这一点 我假设你可以反思 但我宁愿避
  • 井字游戏代码有助于改进

    这是我必须检查玩家在井字棋游戏中获胜的代码 这是一个很长的 if 语句 可以改进 该板由 9 个图片框组成 我是一名 C 初学者 pBox Image Player players Player playerTurn getImage ch
  • TCP客户端;网络流;异步读取; C#

    请原谅我对任务和异步缺乏了解 使用 TcpClient 类 我正在创建与可用服务器的连接 void async RunClientAsync TcpClient client new TcpClient try await client C
  • Web 应用程序框架:C++ 与 Python

    作为一名程序员 我熟悉 Python 和 C 我正在考虑编写自己的简单 Web 应用程序 并且想知道哪种语言更适合服务器端 Web 开发 我正在寻找一些东西 它必须是直观的 我认识到 Wt 存在并且它遵循 Qt 的模型 我讨厌 Qt 的一件
  • 如何在 C# 中启动文件

    编辑 我觉得自己像个白痴 我有一种感觉 像下面的答案会起作用 但没有看到任何与下面的答案类似的谷歌结果 所以当我看到这段复杂的代码时 我想它一定是这样的 我搜索并找到了这个Windows 列出并启动与扩展关联的应用程序 https stac
  • 以概率从列表中选择随机元素

    我有一个包含四个项目 A B C D 的列表 每个项目都有被选择的概率 例如 A 有 74 的机会被选中 B 15 C 7 D 4 我想创建一个函数 根据其概率随机选择一个项目 有什么帮助吗 为您的项目定义一个类 如下所示 class It
  • 用C#发送USSD?

    我想编写一个在 Windows Mobile 6 上运行的简单 C 应用程序 它可以发送 USSD 消息 有没有任何图书馆可以帮助我做到这一点 或者是否有任何示例解释如何使用线路发送USSD http msdn microsoft com
  • 如何获取 C# PriorityQueue 元素的优先级

    我正在初始化一个存储 XY 坐标的优先级队列 根据距原点的欧几里得距离确定优先级 我创建了一个自定义Comparer这使得它作为最大堆运行 PriorityQueue
  • dlopen 或 dlclose 未调用信号处理程序

    我在随机时间内收到分段错误 我注册了信号 但发生分段错误时未调用信号处理程序 include
  • C++ 为非虚方法指定初始化

    我有 a h 如下所示 class A public void doSomething 0 然后我有 b h 如下所示 include a h class b public A public void doSomething 我只是想通过尝
  • 使用 INF 文件 C++ 以编程方式安装驱动程序

    这里有人可以告诉我如何安装第 3 方设备驱动程序吗 如果提供了所有必需的文件 即 inf 文件 sys 等 则以编程方式进行 这 该解决方案应运行的最低操作系统是Windows2000 我尝试复制 inf文件放入Win文件夹 INF文件夹和
  • Bool类型返回规则

    我使用 dapper ORM 所以我使用两个规则Query
  • 通过 MVC 将数据写入数据库的最佳方法是什么?

    我正在使用 MVC 和 EF Core 开发一个家庭作业项目 我正在寻找将数据写入数据库的最佳方法 我是初学者 有两张桌子 Predbilje ba 报名 和Seminari 研讨会 public class Predbilje ba Ke
  • 向窗口句柄发送消息

    我尝试使用 sendmessage 将消息从我的 C 应用程序传递到 C 我的c 代码是这样的 int tmain int argc TCHAR argv COPYDATASTRUCT cpd cpd dwData 0 LPCWSTR st
  • 我的 Opencv 应用程序处理速度非常慢

    我正在构建一个 OpenCV 应用程序 它从相机捕获视频 并在删除背景后将其覆盖在另一个视频上 我无法达到合理的速度 因为它以大约 1 fps 的速度播放输出 而我的背景去除以 3 fps 的速度工作 有没有办法以正常速度显示背景视频并以
  • 致命:所有操作都需要OperationId。请为路径的“获取”操作添加它

    我正在使用 AutoRest 从 swagger json 生成 api 的客户端 输出是 AutoRest code generation utility cli version 3 0 6187 node v10 16 3 max me
  • 返回右值 - 这段代码有什么问题? [复制]

    这个问题在这里已经有答案了 我遇到了以下代码片段 std string test std string m Hello return std move m int main std string m test 我知道上面的代码是不正确且不安
  • “while(true) { Thread.Sleep }”的原因是什么?

    我有时会遇到以下形式的代码 while true do something Thread Sleep 1000 我想知道这是否被认为是好的做法还是坏的做法以及是否有任何替代方案 通常我在服务的主函数中 找到 这样的代码 我最近在 Windo
  • 如何使用 __m128i 执行元素左移?

    我发现 SSE 移位指令只能在所有元素上移位相同的量 mm sll epi32 mm slli epi32 这些会移动所有元素 但移动量相同 http software intel com sites products documentat

随机推荐

  • 应用程序部署到网络驱动器

    我有一个 NET 4 WPF需要在公司网络内运行的应用程序 该应用程序不使用本地文件 它确实有一个app config文件 但它只包含一些connection strings 用于数据存储 但中央SQL server数据库 将应用程序文件放
  • 如何在 python Bottle 中提供带有希伯来语名称的静态文件?

    我收到客户端的请求 要求从服务器下载一些文件 文件名是希伯来语 bottle get download
  • Python/ Boto 3:如何从AWS S3检索/下载文件?

    在Python Boto 3中 发现从S3单独下载文件到本地可以执行以下操作 bucket self aws connection get bucket aws bucketname for s3 file in bucket list i
  • 使用 CakePHP 将视图嵌入到另一个视图中

    我有一个新闻控制器 每个新闻项目都有一个 查看 操作 在每个新闻项目的 查看 操作中 我想包含另一个视图 即评论控制器的 添加 操作 基本上 我需要在每个新闻项目的页面上添加一个表单来添加评论 我有两种观点 但我无法将它们联系起来 我尝试使
  • 期望在 while 循环内 - 永远循环

    我是新来的脚本 所以请原谅我的绊脚石 以下是我的预期脚本的主要内容 目的是滚动浏览多个输出屏幕 在每个屏幕之后都会提示用户 继续 y n 最后 当没有更多屏幕时 会显示 提示符 这应该导致执行脱离 while 循环 set more scr
  • 强制 Expression<> 计算局部变量

    我的 LinqPad 中有类似的东西 void Main var t1 DateTimeOffset Parse 10 1 2012 int n1 1 Expression
  • 我如何委托给 Scala 中的成员?

    在 Scala 中是否可以这样写 trait Road class BridgeCauseway extends Road implements method in Road class Bridge extends Road val ro
  • iPad 弹出窗口中的 NavigationView 在 SwiftUI 中无法正常工作

    我有以下代码 当点击按钮时显示弹出窗口 struct ContentView View State private var show false var body some View Button Open self show toggle
  • 无法使用 torch.Tensor 创建张量

    我试图创建一个张量 如下所示 import torch t torch tensor 2 3 我收到以下错误 类型错误回溯 最近调用 最后 在 gt 1 a torch tensor 2 3 类型错误 tensor 需要 1 个位置参数 但
  • 使用 objdump 反汇编平面二进制文件

    我可以使用 objdump 反汇编平面二进制文件吗 我熟悉使用以下方法反汇编结构化二进制可执行文件 例如 ELF 文件 objdump d file elf 但是 如果我有一个我知道应该加载的平面二进制文件 例如地址 0xabcd1000
  • MappingException Edm.String 与 SqlServer.varbinary 不兼容

    我很难解决一个愚蠢的地图问题 基本上发生的事情是我在 sql db 表中有一个字段 该字段是出于安全目的 加密和解密 的 varbinary 所有这些东西都很好 但似乎 edmx 将该表中的字段视为一个字符串 我认为它应该将其视为给定的数据
  • 具有作用域变量的全局 Makefile

    我正在尝试根据需要将整个项目转换为单个 Makefile 如果this http aegis sourceforge net auug97 pdf每当我遇到递归 makefile 问题时 我都会看到我的所有搜索结果都乱七八糟 然而 我遇到了
  • Capistrano 3 等效复制策略

    我更新到了 Cap 3 看来set deploy via copy不再支持 在里面发布公告 http www capistranorb com 2013 06 01 release announcement html有一个指向视频的链接 用
  • R 中 ntile 和 cut 以及 then quantile() 函数之间的区别

    我发现了关于这个主题的两个线程 用于计算 R 中的十分位数 但是 这两种方法 即dplyr ntile and quantile 产生不同的输出 实际上 dplyr ntile 无法输出正确的十分位数 方法 1 使用 ntile From
  • [[17.0.0,17.0.0]] 上的各个其他库正在请求 com.google.firebase:firebase-iid 库,但解析为 16.2.0

    我今天开始收到此错误 昨天一切正常 gradle 或 firebase 版本没有变化 com google firebase firebase iid 正在请求库 17 0 0 17 0 0 处的各种其他库 但解析为 16 2 0 禁用插件
  • 在运行 .NET 4 的 IIS 7 上找不到默认角色提供程序

    大家早上好 我正在尝试在我的 Web 应用程序中实现自定义成员身份和角色提供程序 这些应用程序是在 IIS 7 实例的默认网站下实现的 我的 Web 应用程序在 NET 4 应用程序池下运行 但是 设置相应的web config后 出现以下
  • 使用 C# 组合两个相对路径

    将相对路径附加到绝对路径 有很多欺骗 但我需要添加相对路径 e g Path1 Parent Child a txt Path2 Sibling file cs Result Parent Sibling file cs Tried Dir
  • Java:计算二项式系数

    我有以下程序计算两个整数的二项式系数 但我想更改程序 它只计算并保存解决方案所需的系数 问题是我现在真的不知道该怎么做 The Code https i stack imgur com 6TUDE jpg public static lon
  • jdk10中外部jar包放在哪里

    我一直在 JDK8 中将外部 jar 放入 jre lib ext 中 但是 当我将jdk更新到jdk10时 我在jdk目录中找不到jre子目录 所以我从Oracle下载了jre10 结果发现ext目录丢失了 我应该把这些外部jar放在哪里
  • C++ 和 C 中的命名空间

    并不是说我会ever在我的专业工作中编写如下代码 以下代码在c 和c中是合法的并且编译时没有警告 include