Comparative Data Types C/C++

When dealing with C, intrinsic types are in lowercase.  Defined types are in all caps by convention.  C data types are case-sensitive.  Integer-class types can take a modifier of "signed" or "unsigned", and are signed by default.

C arrays are defined by the number of elements and are indexed from zero:

"char foo[32]" translates to DIM foo(0 TO 31) AS BYTE, or DIM foo AS STRING * 32, depending on the context of the code.

C arrays are stored in row-major order whereas PowerBASIC arrays are stored in column-major order.  Bear in mind that when accessing C arrays the following C code:

k = arr[i,j]

…would translate to PowerBASIC as:

k = arr(j,i)

C arrays are accessed as follows:

(0,0), (0,1), (0,2), ...

(1,0), (1,1), (1,2), ...

…whereas PowerBASIC arrays are accessed:

(0,0), (1,0), (2,0), ...

(0,1), (1,1), (2,1), ...

Commonly, C/C++ code prefixes data types with "LP" which indicates a pointer.  Therefore, items with the LP prefix usually correspond to a pointer in PowerBASIC; however, the size of the pointer's target will depend on the data type.

More information on C/C++ syntax can be found on the Internet, such as at http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf and http://www.open-std.org/JTC1/SC22/WG21/

C/C++ Data Types

Type

Language

Format

PowerBASIC

bool

C++

unsigned 8-bit

BYTE (2)

char

C/C++

signed 8-bit

BYTE (2)

char*

C/C++

char pointer

STRINGZ (1)

double

C/C++

8-byte float

DOUBLE

float

C/C++

4-byte float

SINGLE

int

C/C++

signed 32-bit

LONG (3)

long

C/C++

signed 32-bit

LONG

short

C/C++

signed 16-bit

INTEGER

void

C/C++

(no return value)

SUB

void *

C/C++

pointer     

(ANY) [PTR] (1)

Defined types (SDK types)  

Type

Format

PowerBASIC

ATOM

unsigned 16-bit

WORD

BOOL

signed 32-bit

LONG

boolean

8-bit integer

BYTE

Boolean

signed 16-bit

INTEGER

BOOLEAN

8-bit integer

BYTE

BSTR

dynamic string

WSTRING {unicode}

BYTE

unsigned 8-bit

BYTE

COLORREF

unsigned 32-bit

DWORD

DWORD

unsigned 32-bit

DWORD

HANDLE

unsigned 32-bit

DWORD

HWND/HDC/…

unsigned 32-bit

DWORD

INT32

signed 32-bit

LONG

INT64

signed 64-bit

QUAD

LARGE_INTEGER

signed 64-bit

QUAD

LPARAM

signed 32-bit

LONG

LP…

pointer     

(ANY) [PTR] (4)

LPCSTR

STRINGZ pointer

STRINGZ [PTR]

LPDWORD

DWORD pointer

DWORD [PTR]

LPINT

LONG pointer

LONG [PTR]

LPSTR

STRINGZ pointer

STRINGZ [PTR]

LPUINT

DWORD pointer

DWORD [PTR]

LPVOID

32-bit pointer

(ANY) [PTR]

LPWSTR

WSTRINGZ pointer

WSTRINGZ [PTR]

LRESULT

signed 32-bit

LONG

NULL

32-bit      

0 or %NULL

PASCAL

{calling convention}

SDECL /STDCALL

QWORD

unsigned 64-bit

QUAD (2)

STDCALL

{calling convention}

SDECL/STDCALL

UCHAR

unsigned 8-bit

BYTE

UINT

unsigned 32-bit

DWORD (3)

UINT16

unsigned 16-bit

WORD

UINT32

unsigned 32-bit

DWORD

UINT64

unsigned 64-bit

QUAD (2)

VOID

SUB         

{no return value}

VOID *

pointer     

(ANY) [PTR] (1)

WINAPI

{calling convention}

SDECL/STDCALL

WORD

unsigned 16-bit

WORD

WPARAM

signed 32-bit

LONG