我在某种程度上不同意在 const 变量的上下文中提及预处理器指令。
关键字 const 与 #define "常量 "的效果不同。
const 在函数签名中非常有用,因为它将传递的参数值设置为只读模式。在编译器生成的可执行二进制文件中没有任何表示。
与 const 变量相反,#define 语句是一个所谓的 r 值,它实际上位于可执行二进制文件中的一个只读内存区域内,因此实际上无法更改。
此外,#define 是预处理器阶段的指令,实际上只是替换源文件中出现的所有内容。这是在编译器看到要编译的代码之前完成的。
此外,#define 指令没有全局的 "位置",它可以出现在源文件的任何地方。在预处理器阶段,代码块"{...}"的概念是不存在的,也不会被评估。
变量的可见性是由代码块定义的。您可以在任何级别随意定义代码块,但全局级别除外。在全局层,代码块需要隶属于某个 "实体"。函数、类、结构体或命名空间。
在这样一个 "命名 "代码块中,你可以任意级联多个代码块,但其可见性始终仅限于同级代码块或包含/子代码块。
静态变量实际上位于为程序分配的全局空间内存中,该变量的可见性由声明/定义它的代码块决定。这也可以是全局空间。实际上,在全局空间中声明/定义的变量有一个隐含的 "static "关键字。明确提及它不会改变该变量的任何行为。
在你的文章中,我忽略了 "extern "和 "input "这两个关键字。我认为这些应该是一部分。
总之,我认为这是一篇很好的文章,尤其是对初学者来说,因为变量的概念有时在开始时很难掌握,如果实现得当,可以避免很多错误。
也许你可以继续写后续文章,如果能包括变量的定义、声明和初始化以及内存等内容就更好了。也许你还可以指出如果操作不当会带来的隐患。
如果想了解更多信息,或许还可以提供一些有关堆栈、变量顺序、MSB 与 LSB、内存寻址的扩展细节....。好吧,也许这太远了。
Dominik Egert #:
我有点不同意在常量变量的上下文中提及预处理器指令。
const 关键字与 #define "常量 "的效果不同。
const 在函数签名中非常有用,因为它可以将参数值设置为只读模式。const 是专门为编码员创建的关键字。它在编译器创建的可执行二进制文件中没有代表。
与 const 变量不同,#define 操作符代表一个所谓的 r 值,它实际上位于可执行二进制文件中的只读内存位置,因此实际上不能以任何方式更改。
此外,#define 是一个预处理器阶段指令,它实际上只是替换了源文件中所有出现的值。这是在编译器看到编译后的代码之前完成的。
此外,#define 指令的 "位置 "与全局指令不同,它可以出现在源文件的任何地方。在预处理器阶段,没有"{...}"代码块的概念,也不会对其进行评估。
变量的可见性由代码块决定。您可以在任何级别以任何方式定义代码块,但全局级别除外。在全局层,你需要一些代码块所属的 "实体"。例如函数、类、结构或命名空间。
在这样一个 "已命名 "的代码块中,你可以任意级联多个代码块,而可见性始终仅限于同级代码块或包含/附属代码块。
静态变量实际上位于为程序分配的全局内存空间中,该变量的可见性由声明/定义它的代码块决定。这也可以是全局空间。事实上,在全局空间中声明/定义的变量有一个隐含的关键字 "static"。明确提及该关键字不会以任何方式改变该变量的行为。
在你的文章中,我忽略了关键字 "extern "和 "input"。我认为它们应该是文章的一部分。
无论如何,我认为这是一篇好文章,尤其是对初学者来说,因为变量的概念有时在开始时很难理解,如果能正确实现,就可以避免许多错误。
也许你会继续写这篇文章,如果能谈谈变量的定义、声明和初始化以及内存就更好了。也许你还会指出错误操作的隐患。
为了加深理解,或许还可以介绍一些有关堆栈、变量排序、MSB 与 LSB、内存寻址的高级细节.....。好吧,也许说得太远了。
感谢您分享这些信息。我会尽力写好您提到的内容。
Dominik Egert #:
关键字 const 与 #define "常量 "的效果不同。
关键字 const 与 #define "常量 "的效果不同。
顺便说一句,我喜欢 C# 中实现常量的方式(编译器会用字面值替换常量)。
https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/constants
事实上,当编译器在 C# 源代码中遇到常量标识符时,它会直接将字面值替换到生成的中间语言 (IL) 代码中。由于常量在运行时没有相关的变量地址 ,因此 常量 字段 不能通过引用传递,也不能作为 l 值出现在表达式中。
新文章 MQL5 中的高级变量和数据类型已发布:
不仅在 MQL5 编程中,在任何编程语言中,变量和数据类型都是非常重要的主题。MQL5 变量和数据类型可分为简单类型和高级类型。在这篇文章中,我们将识别并学习高级类型,因为我们在前一篇文章中已经提到过简单类型。
在本文中,我们将描述并深入了解 MQL5 中的变量和数据类型,以及它们如何在创建或构建 MQL5 交易软件时发挥作用。我们将学习更多关于变量和数据类型的高级概念,并将通过以下主题进行讲解:
作者:Mohamed Abdelmaaboud