为什么 ANSI C 没有命名空间?

2023-12-03

对于大多数语言来说,拥有命名空间似乎是理所当然的事情。但据我所知,ANSI C 不支持它。为什么不?有计划将其纳入未来的标准吗?


为了完整起见,在 C 中,有几种方法可以实现您可能从名称空间获得的“好处”。

我最喜欢的方法之一是使用一个结构来容纳一堆方法指针,这些指针是您的库/等的接口。

然后,您使用此结构的外部实例,该实例在库中初始化,指向所有函数。这允许您在库中保持简单的名称,而无需踏入客户端命名空间(除了全局范围内的 extern 变量,1 个变量 vs 可能数百个方法..)

涉及一些额外的维护,但我觉得这是最小的。

这是一个例子:

/* interface.h */

struct library {
    const int some_value;
    void (*method1)(void);
    void (*method2)(int);
    /* ... */
};

extern const struct library Library;
/* end interface.h */

/* interface.c */
#include "interface.h"

void method1(void)
{
   ...
}
void method2(int arg)
{
   ...
}

const struct library Library = {
    .method1 = method1,
    .method2 = method2,
    .some_value = 36
};
/* end interface.c */

/* client code */
#include "interface.h"

int main(void)
{
    Library.method1();
    Library.method2(5);
    printf("%d\n", Library.some_value);
    return 0;
}
/* end client code */

指某东西的用途.语法与经典建立了强烈的关联Library_function(), Library_some_value方法。然而,有一些限制,其中之一就是不能将宏用作函数。

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

为什么 ANSI C 没有命名空间? 的相关文章

  • C++ 维护子类对象的混合集合

    如果我在这里错过了一个相当基本的概念 我很抱歉 但我正在尝试弄清楚如何维护多个类类型的集合 所有类类型都派生自同一个父类 并且在检索它们时仍然可以访问它们的特定于子类的方法从集合中 作为上下文 我有一个基类 BaseClass 和许多类 例
  • 静态只读字符串数组

    我在我的 Web 应用程序中使用静态只读字符串数组 基本上数组有错误代码 我将所有类似的错误代码保存在一个数组中并检查该数组 而不是检查不同常量字符串中的每个错误代码 like public static readonly string m
  • 如何从 C# 中的 dataTable.Select( ) 查询中删除单引号?

    所以我有一个经销商名称列表 我正在我的数据表中搜索它们 问题是 一些傻瓜必须被命名为 Young s 这会导致错误 drs dtDealers Select DealerName dealerName 所以我尝试替换字符串 尽管它对我不起作
  • C++ 是否可以在 MacOS 上与 OpenMP 和 boost 兼容?

    我现在已经尝试了很多事情并得出了一些结论 也许 我监督了一些事情 但似乎我无法完成我想要的事情 问题是 是否有可能使用 OpenMP 和 boost 在 MacOS High Sierra 上编译 C 一些发现 如果我错了请纠正我 Open
  • Visual Studio 在构建后显示假错误

    我使用的是 Visual Studio 2017 构建后 sln在调试模式下 我收到错误 但是 当我通过双击错误列表选项卡中的错误来访问错误时 错误会从页面中消失 并且错误数量也会减少 我不太确定这种行为以及为什么会发生这种情况 有超过 2
  • 使用 GCP 的数据存储区时如何区分代码是在模拟器中运行还是在 GKE 中运行

    按照中给出的说明进行操作后 我不确定是否遗漏了任何内容https cloud google com datastore docs tools datastore emulator https cloud google com datasto
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • 告诉 Nancy 将枚举序列化为字符串

    Nancy 默认情况下在生成 JSON 响应时将枚举序列化为整数 我需要将枚举序列化为字符串 有一种方法可以通过创建来自定义 Nancy 的 JSON 序列化JavaScript 原始转换器 https github com NancyFx
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • 打破 ReadFile() 阻塞 - 命名管道 (Windows API)

    为了简化 这是一种命名管道服务器正在等待命名管道客户端写入管道的情况 使用 WriteFile 阻塞的 Windows API 是 ReadFile 服务器已创建启用阻塞的同步管道 无重叠 I O 客户端已连接 现在服务器正在等待一些数据
  • 为什么这个二维指针表示法有效,而另一个则无效[重复]

    这个问题在这里已经有答案了 这里我编写了一段代码来打印 3x3 矩阵的对角线值之和 这里我必须将矩阵传递给函数 矩阵被传递给指针数组 代码可以工作 但问题是我必须编写参数的方式如下 int mat 3 以下导致程序崩溃 int mat 3
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • 这个可变参数模板示例有什么问题?

    基类是 include
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • GCC 的“-Wl,option”和“-Xlinker option”语法之间有区别吗?

    我一直在查看一些配置文件 并且看到它们都被使用 尽管在不同的体系结构上 如果您在 Linux 机器上使用 GCC 将选项传递给链接器的两种语法之间有区别吗 据我所知 阅读 GCC 手册时 他们的解释几乎相同 From man gcc Xli
  • 灵气序列解析问题

    我在使用 Spirit Qi 2 4 编写解析器时遇到一些问题 我有一系列键值对以以下格式解析

随机推荐

  • Dart 获取下周五的日期

    我正在尝试制作一个应用程序来倒计时直到下周五 但因此我需要下周五的日期 非常感谢任何帮助 Solution extension DateTimeExtension on DateTime DateTime next int day retu
  • 忽略 PostgreSQL 触发之前的结果?

    该主题是该主题的一部分挑战thread我正在为 BEFORE TRIGGER 的一部分寻找更好的解决方案 我只想启动一个触发器来转换为正确的括号 我在想我是否应该从触发器返回 NULL 或者在触发器之前返回其他内容 Code CREATE
  • VBA快速插入多条记录到Access DB

    好的 我有一个电子表格 可以生成相当大量的记录 3500 我有以下脚本将它们插入到我的访问数据库中 Sub putinDB Dim Cn As ADODB Connection Rs As ADODB Recordset Dim MyCon
  • Tensorflow.strided_slice 缺少参数“strides”?

    我正在尝试跑步cifar10 train py根据教程 但我得到了 cifar10 input py line 87 in read cifar10 tf strided slice record bytes 0 label bytes t
  • 缺少安装 OpenCV HighGUI

    我在安装 OpenCV 时遇到一些问题 我使用了此处提供的 2 3 1 windows superpack http opencv willowgarage com wiki 我将其解压到 C OpenCV 并使用 CMake 将其构建到
  • 用汇编语言弹出 CD/光驱

    这再简单不过了 但并没有改变 我有一个简单的代码 用于查看光驱是否会弹出 该代码采用汇编语言 intel nasm 语法 BITS 16 ORG 0X07C00 STI Eject mov ah 46h mov al 00h mov dl
  • 读取 FASTA 文件

    我想将文件的以下行转换为 JSON 我想将其保存到猫鼬模式中 gt HWI ST700660 96 2 1101 1455 2154 5 0 1 GAA GAATG 应该 gt HWI ST700660 96 2 1101 1455 215
  • 使用 htaccess 重定向目录,但不重定向其中的文件

    在我的网站上 我有一个目录 folder 其中包含一些图像和 html 我想重定向尝试访问的用户http domain com folder to http domain com 但不希望对该目录中的文件的请求重定向到http domain
  • 如何将箱线图保存为变量?

    如何将箱线图保存为 R 中的变量 例如 如果我这样做 plot lt boxplot count spray data InsectSprays col lightgray 当我调用绘图时 我希望它显示箱形图 这样我不需要每次都运行绘制箱形
  • 将发件人电子邮件更改为 Woocommerce 中的客户账单电子邮件

    我需要将订单电子邮件发件人更改为客户电子邮件 功能更改返回电子邮件为 public function get from address from address apply filters woocommerce email from ad
  • 更改 URL 映射 -Javamelody

    我在用着爪哇旋律在我的应用程序中 我只需要 root 用户来访问统计信息 Javamelody 默认情况下您可以访问 http localhost webapp monitoring 我需要将其更改为 http localhost weba
  • StreamReader 太贪心了

    我正在尝试处理文本文件的一部分 并使用将文本文件的其余部分写入云 blobUploadFromStream 问题在于 StreamReader 似乎从底层流中获取了太多内容 因此后续写入不执行任何操作 文本文件 3 Col1 String
  • 如何设置 Web 挂钩来检查 DocuSign Envelope 状态?

    我编写了使用信封请求客户端签名的代码 如本教程所示 https www docusign com developer center recipes request a signature via email using a template
  • 在汇编中反转字符串时遇到问题

    我正在尝试反转汇编中的字符串 但是我的代码似乎无法正常工作 我添加了换行符以提高可读性 我使用 linux 和 nasm 作为编译器 我认为如果我获取地址指针的值并将它们切换到正确的位置 字符串最终会被反转 然后恢复正常 这是我的代码 se
  • jsf primefaces 进度条在操作方法运行时更新值

    我的 JSF 页面底部有一个提交按钮 它将所有输入 文本 文件等 提交到数据库和服务器 由于此操作需要持续时间 我想向用户显示操作的进度 并在完成后将他重定向到完成站点 我的豆看起来像
  • 在python中将文本转换为数字

    输入是一个文本表 有些列是数字 有些是文本 我有 python 脚本将此文本文件转换为 xlsx 在 Excel 或 Libre 中打开后 所有字段都是文本 是否有任何选项可以将某些列转换为数字 猫脚本 py import csv impo
  • Spring + TestNG 不进行事务回滚

    我正在使用 TestNG 6 9 9 构建回归测试环境 但是在使用JUnit的时候遇到了一个我从来没有遇到过的问题 在我看来 当完成每个测试用例时 如果测试方法在与其调用的相同事务上下文中运行 则默认情况下每个数据的更改都会自动回滚 但似乎
  • JSP EL可以直接进行属性访问吗

    这真的让我很惊讶 我的 JSP 中有以下代码
  • Google 地图无法在派生 apk(已发布的应用程序)中工作

    好吧 我想先说一下我已经尝试了多种解决方案 例如 Android Studio 真实 Android 设备上的 Google 地图仍然空白 Android Google Maps API 版本无法正常工作 我尝试获取 SHA1 指纹 并将这
  • 为什么 ANSI C 没有命名空间?

    对于大多数语言来说 拥有命名空间似乎是理所当然的事情 但据我所知 ANSI C 不支持它 为什么不 有计划将其纳入未来的标准吗 为了完整起见 在 C 中 有几种方法可以实现您可能从名称空间获得的 好处 我最喜欢的方法之一是使用一个结构来容纳