C 库命名约定

标签 c naming-conventions

介绍

大家好,我最近学习了 C 语言编程! (这对我来说是一个巨大的进步,因为 C++ 是第一门语言,我接触并吓跑了将近 10 年。)来自主要面向对象的背景(Java + C#),这是一个非常好的范式转变。

我喜欢 C。它是一种如此美丽的语言。最让我吃惊的是,C 支持的高度模块化和代码可重用性——当然它没有 OO 语言那么高,但仍然远远超出我对命令式语言的期望。

问题

如何防止客户端代码和我的 C 库代码之间的命名冲突?在 Java 中有包,在 C# 中有命名空间。想象一下我写了一个 C 库,它提供了“添加”操作。客户端很可能已经在使用这样的操作 - 我该怎么办?

我特别在寻找对客户友好的解决方案。例如,我根本不想为我的所有 api 操作添加前缀,如“myuniquelibname_add”。在 C 世界中对此有哪些常见的解决方案?您是否将所有 api 操作都放在一个结构中,以便客户端可以选择自己的前缀?

我非常期待通过您的回答获得更多见解!

编辑(修改后的问题)

尊敬的回答者,感谢您的回答!我现在明白了,前缀是安全避免命名冲突的唯一方法。所以,我想修改我的问题:我有什么可能性让客户选择他自己的前缀?

答案Unwind发布,是一种方式。它不使用通常意义上的前缀,但必须在每个 api 调用前加上“api->”前缀。还有哪些进一步的解决方案(例如使用#define)?

编辑 2(状态更新)

这一切都归结为以下两种方法之一:

  • 使用结构
  • 使用#define(注:方法有很多种,怎么用#define来实现,我想要什么)

我不会接受任何答案,因为我认为没有正确答案。选择哪种解决方案取决于具体情况和自己的喜好。我自己会尝试您提到的所有方法,以找出哪种方法最适合我在哪种情况下。欢迎在相应答案的评论中发表支持或反对某些方法的论据。

最后,我要特别感谢:

  • Unwind - 因为他的复杂回答,包括“结构方法”的完整实现
  • Christoph - 感谢他的好回答并指出我 Namespaces in C
  • 所有其他人 - 感谢您的宝贵意见

如果有人认为关闭这个问题是合适的(因为没有进一步的见解可以期待),他/她应该随意这样做 - 我不能决定这个,因为我不是 C 大师。

最佳答案

我不是 C 大师,但从我使用的库来看,使用前缀来分隔函数是很常见的。

比如SDL会用SDL,OpenGL会用gl等...

关于C 库命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1988728/

相关文章:

c - GtkTextView 无法换行

python - 当编写/阅读 python 代码时,人们如何判断变量是否是对象?

c# - 在您自己的类上使用 System.* 命名空间是否被视为不良做法?

iOS 应用程序由于无限 while 循环而无法渲染

c - 如何只包含来自不同 C 文件的一个函数

c - 读取管道 block ,直到在管道末端运行的程序终止 - Windows

iphone - Objective-C 常量键命名

go - 如果 go 包名称不以 github.com 开头,请注意?

c# - 如何使用 DBNull.Value 清晰快速地参数化空字符串

c++ - 使用 gpfs​​_fcntl 的 EINVAL