标签、函数的命名约定

Posted

技术标签:

【中文标题】标签、函数的命名约定【英文标题】:Naming convention for labels, functions 【发布时间】:2017-01-08 11:08:39 【问题描述】:

我有点困惑,仍然没有找到明确的答案:我应该将标签命名为“label1”还是下划线“_label1”?什么是最流行和最知名的方式?如果我没记错的话,我什至见过一个带点“.label1”的。

函数也有同样的问题:“function1”还是“_function1”?

【问题讨论】:

什么操作系统?什么架构?什么调用约定?所有这些问题都会影响答案。 @fuz、windows、linux、x32、x86-64、stdcall、fastcall、cdecl。 The leading underscore not recommended nowadays for labels?的可能重复 @ako25 你确定你的意思是 x32 而不是 x86-32? @fuz,,,,.. 是的。 【参考方案1】:

从代码可维护性的角度来看,前导点和下划线不会为标签添加任何有用的信息,因此如果没有特别需要这些前缀(见下文),您应该去掉它们。您可能认为“它看起来很花哨”这一事实并不足以成为使用它们的理由。

汇编器有时使用点来指定标签是本地,即不作为符号导出到目标文件。这对于不使用不需要的符号污染全局名称空间很有用。

其他汇编器使用点来表示汇编器指令,并且根本不允许在符号中使用点。

下划线通常用于必须与高级语言集成的汇编代码。一些 C 编译器为所有导出的符号加上下划线前缀,为了能够从 C 代码中调用,汇编器函数需要遵循此规则。

通常,您的汇编器(和/或编译器,如果您与已编译代码集成)手册应该能够告诉您您的特定汇编器支持或需要哪些变体。如果手册没有明确告诉您何时以及为什么应该使用此类前缀,请不要使用它们 - 汇编器标签是自我记录代码的一个(最小和最重要的)部分。如果不需要,不要将其浪费在无意义的前缀上。

【讨论】:

顺便说一句,.data 或 .bss 或任何其他部分下面的代码缩进怎么样 - 是否建议为下面的代码或声明插入缩进?我不知道什么更受欢迎,我一直看到这两种方法。 @ako25 无法告诉您“推荐的做法”是什么 - 只是我对此的看法:我不缩进部分 - 部分更改发生得太少,不足以证明完全 水平缩进 (一旦缩进区域长于一屏,无论如何它也没多大用处)。但是,我确实会尝试确保一个 section 指令在 vertically 上突出 - 也就是说,我倾向于在这些行上方插入 2-3 个空行,在这些行下方插入至少一个空行。【参考方案2】:

对于 Microsoft“C”函数,实际的函数名称将有一个前导下划线。对于 32 位模式汇编,在 .model 指令中包含语言类型:

        .model  flat,c      ;for 32 bit mode only, no underscores needed

这消除了在函数名称中使用下划线的需要。在 64 位模式下,似乎不允许使用 .model 指令,但它似乎默认为 .model flat,c 。

附带说明,Visual Studio 2015 及更高版本默认为 C 源文件中的“内联”printf(和其他一些东西)。有一个可以从汇编代码中使用的旧版本。示例包括 lib 语句。

        includelib      msvcrtd
        includelib      oldnames
        includelib      legacy_stdio_definitions        ;for printf

【讨论】:

以上是关于标签、函数的命名约定的主要内容,如果未能解决你的问题,请参考以下文章

tableView 函数中的命名约定

PostgreSQL中的函数中是不是有命名参数的约定

stdio 函数(sprintf、vsprintf 和 fprintf)背后的命名约定是啥?

根据命名约定检查函数参数类型

C++ 命名约定 [关闭]

“foop”:命名约定?它是“foo”的辅助递归函数;后缀“p”是啥意思?