User Tools

Site Tools


define

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
define [2018/06/08 04:04] – created wolfgangriedmanndefine [2019/08/21 06:02] (current) wolfgangriedmann
Line 11: Line 11:
 <code>define MyVODefine := 123 // VO style, globally visible <code>define MyVODefine := 123 // VO style, globally visible
 #define MyVulcanDefine 123  // Vulcan style, replaced by the compiler</code> #define MyVulcanDefine 123  // Vulcan style, replaced by the compiler</code>
 +
 +Please note that in the current X# version (2.0.4.0 aka Bandol GA) the #ifdef/#ifndef statement does not sees the VO style define, but only the #define, so you have to work eventually with include files.
  
 Why X# has been returned to the VO style has been explained by Robert v.d.Hulst: Why X# has been returned to the VO style has been explained by Robert v.d.Hulst:
  
-For me the most important reason to switch back from #define to DEFINE is the way it was implemented and the consequences of this implementation. +//For me the most important reason to switch back from #define to DEFINE is the way it was implemented and the consequences of this implementation. 
-In Vulcan the preprocessor (and the X# preprocessor well) do a "dumb" Search and Replace for defines and this has unwanted side effects. +In Vulcan the preprocessor (and the X# preprocessor as well) do a "dumb" Search and Replace for defines and this has unwanted side effects. 
-Consider the following code:+Consider the following code://
  
 <code>#define DELETE 1 <code>#define DELETE 1
 Function Delete(nRec as LONG) AS LOGIC</code> Function Delete(nRec as LONG) AS LOGIC</code>
  
-If the preprocessor compatibility command line option (/vo8) is switched on, then this will be preprocessor to:+//If the preprocessor compatibility command line option (/vo8) is switched on, then this will be preprocessor to://
  
 <code>FUNCTION 1(nRec as LONG) AS LOGIC</code> <code>FUNCTION 1(nRec as LONG) AS LOGIC</code>
  
-Please note how the name of the function was replaced by the value of the define.+//Please note how the name of the function was replaced by the value of the define.
 This causes many cryptic error messages, making it very difficult for new users to get started. This causes many cryptic error messages, making it very difficult for new users to get started.
-Without /vo8 this would only happen if the function name was written in ALL CAPITAL letters.+Without /vo8 this would only happen if the function name was written in ALL CAPITAL letters.//
  
-The way VO does it (and the way the DEFINE In X# is implemented) this is not handled by te preprocessor. In a later compiler phase the "binder" will lookup names and will find the value and substitute the name in the parse tree with the values.+//The way VO does it (and the way the DEFINE In X# is implemented) this is not handled by te preprocessor. In a later compiler phase the "binder" will lookup names and will find the value and substitute the name in the parse tree with the values.
 The DEFINE itself is stored as a global const value inside the same class where GLOBALs and FUNCTIONs are stored. The DEFINE itself is stored as a global const value inside the same class where GLOBALs and FUNCTIONs are stored.
  
-This does not have this side effect.+This does not have this side effect.//
define.txt · Last modified: 2019/08/21 06:02 by wolfgangriedmann