是不是为实现保留了双下划线?我指的是像this这样的东西。人们似乎总是忽视这个惯例。
以下是代码:
signed int __cdecl upload_exploit() {
int device_type;
signed int payload_address;
int free_address;
int deviceerror;
char *chunk_headers_ptr;
...
Here是定义约定的地方:
除了本手册中记录的名称外,还有保留名称 包括所有外部标识符(全局函数和变量) 以下划线('_')和所有标识符开头,不管用途如何 以两个下划线或下划线后跟一个开头 大写字母是保留名称。这是图书馆和 头文件可以为内部定义函数,变量和宏 目的,没有与用户程序中的名称冲突的风险。
编辑:
虽然这是一个不好的例子,我的问题的精神仍然存在:我看到程序员“错误地”使用双下划线。它有什么含义?他们试图传达关于函数/关键字的内容?
答案 0 :(得分:3)
人们写了很多无效的东西C.编译器缺乏严格性是他们能够逃脱的主要原因。但是在您链接的示例的情况下,似乎代码没有做错任何事情。它不是在保留名称空间中非法定义标识符,而是使用标准标头中的实现提供的实现定义标识符。
答案 1 :(得分:1)
__cdecl
是Microsoft特定的函数限定符。这确实是实施的一部分。
答案 2 :(得分:0)
正如一位着名的科幻作家曾经说过的," 90%的一切都是废话",遗憾的是,这也适用于计算机程序(和计算机程序员)。
确实大多数以下划线开头的标识符都是保留的,但同样正确的是(a)这条规则很少被强制执行,因此(b)它被广泛忽略了。它也让我烦恼。
在回答您的后续问题时,那些程序员甚至不确定他们想要传达的内容。 A"特别"标识符,"不同的"标识符,"元"标识符。他们已经看到了这样的下划线,所以他们认为模仿它一定是个好主意。
请不要模仿他们,但如果你不能理解他们想要完成什么,请不要担心,因为我通常也不会。