我很困惑,还没有找到明确的答案:我应该将标签命名为“label1”还是带有下划线“_label1”?什么是最流行和最可识别的方式?如果我没有记错的话,我甚至看到一个带有“.label1”的点。标签,函数的命名约定
相同的问题去功能:“function1”或“_function1”?
我很困惑,还没有找到明确的答案:我应该将标签命名为“label1”还是带有下划线“_label1”?什么是最流行和最可识别的方式?如果我没有记错的话,我甚至看到一个带有“.label1”的点。标签,函数的命名约定
相同的问题去功能:“function1”或“_function1”?
从代码可维护性的角度来看,前导点和下划线不会向标签添加任何有用的信息,因此如果没有特定需要这些前缀(请参见下文),则应该删除它们。只是你可能认为“看起来很花哨”的事实是没有足够的理由来使用它们。
汇编程序有时使用点来指定标签是本地,即不作为符号导出到目标文件。这可以很有用,以便不会用不需要的符号污染全局名称空间。
其他汇编程序使用点来表示汇编程序伪指令并且根本不允许使用符号中的点。
下划线通常由必须与更高级语言集成的汇编代码使用。一些C编译器在所有导出的符号前加下划线,为了能够从C代码中调用,汇编函数需要遵循这个规则。
通常,您的汇编程序(和/或编译器,如果您与编译代码集成)手册应该能够告诉您特定汇编程序支持或需要哪些变体。如果手册没有明确地告诉你什么时候以及为什么要使用这样的前缀,只是不要使用它们 - 汇编器标签是自我记录代码的一个(最小也是最重要的)部分。如果你不需要,不要浪费那些毫无意义的前缀。
在Microsoft“C”函数的情况下,实际函数名称将具有前导下划线。对于32位模式汇编,包括在.MODEL指令语言类型:
.model flat,c ;for 32 bit mode only, no underscores needed
这样就无需在功能名称中使用下划线。在64位模式下,.model指令似乎不被允许,但它似乎默认为.model flat,c。
在附注上,Visual Studio 2015现在“内联”printf(以及其他一些东西),所以试图从汇编代码中调用printf不再有效。我觉得最容易的方法是在项目中添加一个C源代码文件,并在那里安装printf,在这种情况下,汇编代码可以调用由C源代码文件创建的printf。
什么操作系统?什么架构?什么叫惯例?所有这些问题都会影响答案。 – fuz
@fuz,windows,linux,x32,x86-64,stdcall,fastcall,cdecl。 – ako25
可能重复[领先的下划线不是现在推荐的标签?](http://stackoverflow.com/questions/41529300/the-leading-underscore-not-recommended-nowadays-for-labels) –