C 如何读取linux风格的函数名?

C 如何读取linux风格的函数名?,c,linux,function,C,Linux,Function,我看到了一种与我第一次学到的风格截然不同的风格。我习惯于尽我所能让代码像普通英语一样阅读。实际上,这意味着大多数函数名都以祈使动词开头: 有道理: DoWorkOnA(); DoWorkOnB(); MODULEA_DoWork(); MODULEB_DoWork(); 但现在,当我在linux内核和SDK函数中使用更多低级代码时,我看到了更多: 毫无意义: a_work_do(); b_work_do(); 这一大堆名词和动词背后有什么逻辑吗?似乎动词总是以某种奇怪的方式放在最后。我可以

我看到了一种与我第一次学到的风格截然不同的风格。我习惯于尽我所能让代码像普通英语一样阅读。实际上,这意味着大多数函数名都以祈使动词开头:

有道理:

DoWorkOnA();
DoWorkOnB();
MODULEA_DoWork();
MODULEB_DoWork();
但现在,当我在linux内核和SDK函数中使用更多低级代码时,我看到了更多:

毫无意义:

a_work_do();
b_work_do();
这一大堆名词和动词背后有什么逻辑吗?似乎动词总是以某种奇怪的方式放在最后。我可以理解为公共函数加前缀以防止名称冲突,但这似乎比前缀更深:

有道理:

DoWorkOnA();
DoWorkOnB();
MODULEA_DoWork();
MODULEB_DoWork();
学习阅读他人的代码是作为开发人员成长的一个重要部分。我只是想弄明白我怎样才能更快地读懂一堆乱七八糟的单词

add_work()
的例子在这方面很有意义

这一大堆名词和动词背后有什么逻辑吗

当然有

a_work_do()
指主体
a
、客体
工作
、动作
do
(与后两者相关)

可能会有更多类似的内容,然后在主题和对象上进行很好的排序:

a_work_create()
a_work_do()
a_work_cleanup()

等等


尤达,是个聪明人,不是吗?;-)

是的,“CAMEL CASE”是C++,而不是C。传统上,C使用小写,上文保留了系统<代码>定义< /代码>等。对于命名,一般所做的是功能命名。如果您正在对字符串进行操作并进行转换,则会看到这样的示例(例如,
strrol
(字符串到long)或
strod
(字符串到double))。它也遵循变量命名约定。这到底是什么意思?谁知道呢,但是对于内核开发人员来说,如果它是在
a
b
上工作的某种二进制选择,那么它是有意义的。这只是风格的问题在C#中对您有意义。然后在爪哇中编写<代码> DoOrKONANA()/<代码>,在C或C++中编写<代码> doiWorksOnOne()/<代码>。如果您感兴趣,请查看。使用函数所作用的模块或类型作为函数名称的前缀,意味着与模块或数据类型相关的所有函数都将显示在分组在一起的列表中。我认为这是命名惯例的主要原因。@MichaelBurr,这可能不是故事的一半。前缀命名通常用于避免不同模块之间的命名冲突,这样您就可以在不干扰另一部分的情况下向一部分添加函数。