gpt4 book ai didi

c - 仅 C 语言实现(私有(private))常量是否有命名约定?

转载 作者:行者123 更新时间:2023-11-30 20:01:16 25 4
gpt4 key购买 nike

假设我正在编写一个名为 my 的库,其中有一个模块 myString .

myString 的公开函数和常量在 myString.h 中声明遵循以下约定:

typedef struct myString myString;
extern const size_t MY_STRING_MAX_LEN;
myString *my_string_new();

仅私有(private)实现函数和结构成员在 myString.c 中声明遵循以下约定:

_grow_buffer(myString *this);
char *_buffer;

我的问题:对于私有(private)的、仅实现的常量是否有类似的约定?

例如,_CHUNK_SIZE这是我最初想要的。然后我读到 C 语言规范规定不要在名称开头使用下划线后跟大写字母,因为此类名称可能会在该语言的 future 版本中使用。

我喜欢使用以下划线开头的约定,因为它消除了很多冗长的内容。我可以使用 MY_STRING_CHUNK_SIZE或一些变化,但在我看来,这并不那么漂亮。

最佳答案

在 C 语言中,具有链接的文件范围标识符(例如函数和变量名称)通过内部链接对翻译单元私有(private)。内部链接使用static存储类说明符指示:

static char *buffer;
static void grow_buffer(my_string *str) { /* ... */ }

这并不能解决所有问题。在大型代码库中,可能有多个标识符,例如 grow_bufferbuffer。当您想要搜索 buffer 的定义时,给出六种可能性是很烦人的。

出于这个原因,在静态标识符上使用一些前缀约定仍然不是一个坏主意,例如在公共(public)函数上使用相同的前缀。如果您决定将标识符的分类从静态更改为外部,反之亦然,这也使您不必重命名标识符。

关于c - 仅 C 语言实现(私有(private))常量是否有命名约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34572212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com