Condividi tramite


How to: Use the #defInc and #defDec Directives

Applies To: Microsoft Dynamics AX 2012 R3, Microsoft Dynamics AX 2012 R2, Microsoft Dynamics AX 2012 Feature Pack, Microsoft Dynamics AX 2012

The #defInc and #defDec directives apply only to macros that have a value that can be converted to the formal int type. A value can only contain numerals. The only non-numeric character allowed is a leading negative sign (-).

#defInc and #defDec are the only directives that interpret the value of a macro.

The integer value is treated as an X++ int, not as an int64.

Prerequisites

For this topic, you must understand the information in How to: Test a Macro Value.

Code Sample Using #defInc and #defDec

In the following code sample, the initial value of the macro CounterMacroA is a string that can be converted into an integer. The sample shows how the #defInc and #defDec directives can be used for this macro name.

    static void SimpleDefINCJob(Args _args)
    {
        ;
        #define.CounterMacroA(1)
    
        #defInc.CounterMacroA
    
        info("mg11: # CounterMacroA == " + int2str(#CounterMacroA));
    
        #if.CounterMacroA(2)
            info("mg12: # if confirms CounterMacroA == 2");
        #endif
    
        #defDec.CounterMacroA
    
        info("mg23: # CounterMacroA == " + int2str(#CounterMacroA));
    
        #if.CounterMacroA(1)
            info("mg24: # if confirms CounterMacroA == 1");
        #endif
    
    /**************  Actual Infolog output
    Message (12:47:57 pm)
    mg11: # CounterMacroA == 2
    mg12: # if confirms CounterMacroA == 2
    mg23: # CounterMacroA == 1
    mg24: # if confirms CounterMacroA == 1
    **************/
    }

Treatment of Special Values

It is recommended that the #defInc and #defDec directives only be used for macros that have an integer value. The precompiler follows special rules for #defInc when the macro value is not an integer, or when the value is unusual or extreme.

Cc197118.collapse_all(en-us,AX.60).gifValues that are Converted to Zero

The following table lists the values that #defInc converts to zero (0) and then increments. When a value is converted to 0 by #defInc, the original value cannot be recovered, not even by #defDec.

Macro value

Behavior

(+55)

The positive sign (+) prefix makes the precompiler treat this as a non-numeric string. The precompiler treats all non-numeric strings as 0 when it handles a #defInc (or #defDec) directive.

("3")

Integers enclosed in quotation marks are treated as 0. The quotation marks are discarded, and these changes persist.

( )

A string of spaces is treated as 0, and then incremented.

()

A zero-length string is treated as 0, and then incremented, when the value is enclosed in parentheses, as in #define.MyMac().

(Random string.)

Any non-numeric string of characters is treated as 0, and then incremented.

(0x12)

Hexadecimal numbers are treated as non-numeric strings. Therefore they are converted to 0, and then incremented.

Cc197118.collapse_all(en-us,AX.60).gifOther Special Values

The following table explains how other special values are treated by #defInc.

Macro value

Behavior

(-44)

Negative numbers are acceptable, including integers without the negative sign (-).

(2147483647)

The maximum positive int value is changed to the minimum negative int value by #defInc.

(999888777666555)

Any large number, beyond the capacity of int and int64. This is treated as the maximum positive int value.

(5.8)

Real numbers are truncated by #defDec (and #defInc). Subsequent symbol substitution shows that the truncation persists.

When no value and no parentheses are provided for the directive #define.MyValuelessMacro, the precompiler rejects use of the directive #defInc.MyValuelessMacro.

Important Scoping of #defInc

For macro names that are used by the #defInc directive, it is important that the #define directive that creates the macro not reside in a class declaration. The behavior of #defInc in these cases is unpredictable. Instead, such macros should be defined in only a method or job.

See also

Macros in X++

Announcements: New book: "Inside Microsoft Dynamics AX 2012 R3" now available. Get your copy at the MS Press Store.