我想知道C/C++标准库中使用的命名约定是否有名称,或者至少有一个可以查找规则的备忘单。例如:
push_back -- underscore used
setstate -- but not used here!
string::npos -- when to use abbreviations?
fprintf
...
C/C++标准库中使用的命名规范有特定名称吗?
我想知道C/C++标准库中使用的命名约定是否有名称,或者至少有一个可以查找规则的备忘单。例如:
push_back -- underscore used
setstate -- but not used here!
string::npos -- when to use abbreviations?
fprintf
...
C/C++标准库中使用的命名规范有特定名称吗?
C/C++使用著名的捏造式命名约定。一般而言,您可以关于C/C++标准库命名约定唯一确定的事情是它不使用驼峰式命名(除了C++ STL模板类型名称),它使用小写类和函数名称,并且(有时)使用下划线分隔单词。但下划线的使用更多地是C++的事情;特别是C倾向于缩写单词,例如strlen
,memcpy
。这可能是UNIX早期使用非常简洁的名称来表示事物的倾向的结果。
strlen
、strlenxyz
和 strlenohmygodwhathaveidone
都指代相同的东西。因此,为了与早期的ANSI编译器兼容,ANSI C标准确保所有标准库符号的前6个字符在彼此之间是唯一的。 - Adam RosenfieldC标准库有明确定义的规则,您必须遵循以避免名称冲突。不过我对C++一无所知。
如果您认为这很混乱,那么您应该查看PHP库...
uint
或int
开头并以_t
结尾的类型名。 - Johannes Schaub - litb我认为不同时间由不同人发明的几个组使用略有不同的约定:C库、流、字符串、STL(容器+算法+迭代器)。我感觉后者可能被视为“惯例”,这为boost和C++0x命名等事物设定了榜样。
可悲的事实是 - 实际上并没有真正的规则。
以stdio函数的参数顺序为痛苦的提醒。
for (i = 0; i < n; i++) { fputs(s[i], stdout); fputc('\n', stdout; }
),与第一个参数不变相比较,要更加经济高效。然而,对于像printf
这样的可变参数函数,固定参数必须位于参数列表的开头。 - ephemient我没有答案,但至少我不认为C和C++使用相同的命名约定。
C
有一个名为strpbrk
的函数,而C++
有一个名为sync_with_stdio
的函数,而不是swstdio
:) - Johannes Schaub - litb我认为这两种命名约定都没有一个名称。
C和C++标准中的命名约定是不同的,尽管有些微妙的关联。
特别是,在C库中,没有任何函数或宏名称包含下划线(据我所知),而C++库则不同。
大多数C库命名约定都受先例控制;它标准化了现有的实践(大约在1984年左右),并且发明的很少(通过<locale.h>
处理区域设置是主要的)。
C++库也基于先例 - 但是一组不同的先例,我认为可以争论的是,在STL被采用为标准之前,它并没有像C库中的函数那样广泛使用。
std::ios_base::Init
的奇怪大写字母 o_O。 - Johannes Schaub - litb