Enum

Overview

Enums in GCBASIC provide a convenient way to define named constants, improving code readability and maintainability.    Instead of using raw numeric values, users can define meaningful names for states, modes, or categories.

Syntax:

The Enum keyword allows users to declare an enumeration with automatic assignment of values:

Enum ModbusState [Reset]
    MODBUS_IDLE           ' Waiting for a new message
    MODBUS_SYNC           ' Sync with Modbus device address
    MODBUS_FUNCTION_CODE  ' Identify function code
    MODBUS_PROCESS_DATA   ' Read incoming data bytes
    MODBUS_COMPLETE       ' Packet processing finished
End Enum

The optional Reset parameter will start this specific enum at zero.  If Reset is not specified then every enum element will be sequentially/uniquely numbered.

Enhanced Compatibility with External Systems

Many protocols, such as Modbus, require specific numeric values for states or function codes.    By letting users define their own values, they can align their enums with standardised protocols.   The Enum keyword also allows users to declare an enumeration with named constants:

Enum ModbusState
    MODBUS_IDLE = 1
    MODBUS_SYNC = 0x02
    MODBUS_FUNCTION_CODE = 0x03
    MODBUS_PROCESS_DATA = MODBUS_FUNCTION_CODE + 1
    MODBUS_COMPLETE = INT((30/2)+1)
End Enum

Users can manually assign enumeration values using constants and expressions.    Calculations must use the equals sign (=), following #DEFINE rules.

Usage

Users can declare variables of an enum type and assign values directly:

Dim currentState As Byte
currentState = MODBUS_IDLE

Enums can be used in conditions for more readable logic:

If currentState = MODBUS_FUNCTION_CODE Then
    ' Handle function code processing
End If

Users can also define additional Enum values using constants:

#DEFINE CUSTOM_STATE = MODBUS_PROCESS_DATA + 2
If currentState = CUSTOM_STATE Then
    Print "Custom processing step reached."
End If

Conversion Support

Enums in GCBASIC can be used in mathematical operations and references to other constants.    This allows developers to integrate enums seamlessly into calculations and logical expressions.

Math Operations

Users can use enums in arithmetic expressions since they resolve to numeric values:

Dim nextState As Byte
nextState = MODBUS_SYNC + 1 ' Evaluates to MODBUS_FUNCTION_CODE

Enums can also be used in expressions involving comparisons:

If currentState < MODBUS_COMPLETE Then
    ' Keep processing data
End If

Reference to Other Constants

Since enum values are numeric, users can reference them in calculations that involve predefined constants:

#DEFINE MAX_STATE = MODBUS_COMPLETE
If currentState = MAX_STATE Then
    Print "Processing complete."
End If

Summary

  • Users can use automatic enumeration values.
  • Users can manually assign enumeration values using constants and calculations.
  • Calculations must use the equals sign (=), following GCBASIC’s #DEFINE rules.
  • Enums allow users to define named constants.
  • Values start at 0 and increment automatically if not manually assigned.
  • Enums improve readability and eliminate the need for magic numbers.
  • Enums can be used in mathematical operations and references to constants.