Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Published by Scroll Versions from space RWDEVEL and version 2024.1

...

Table of Content Zone
maxLevel3
minLevel3
locationtop

Attribute

Node describing an "attribute" as it appeared in the source. For example:
int x __attribute__ ((unused)); // Declaration with an Attribute

Anchor
AttributeArgument
AttributeArgument
Attribute Argument

Node describing the arguments of an attribute. For example:

void f() __attribute__ ((interrupt("IRQ"))); // Attribute Argument "interrupt"

Attribute Group

Value is "\"IRQ\""

If the argument of an attribute is an expression that is evaluated to a constant, the value of the attribute is that constant converted to a stringNode describing an attribute group. For example:

alignas(sizeof(int)*2) int g; // Value is "8" - when sizeof(int) equals 4

If the argument of an attribute is a type name, the attribute value is the full name of that type. For example:

alignas(long long) int g; // Value is "long long"

Attribute Group

Node describing an attribute group. For example:

Code Block
void fx1() { /* ... */; }
void fx2() __attribute__
Code Block
void fx1() { /* ... */; }
void fx2() __attribute__((weak, alias("fx1")));// Both attributes have the same Attribute Group

...

Table of Content Zone
maxLevel3
minLevel3
locationtop

Integer Constant

Constant integer expression. For example:

int i = 10; // Integer Constant, Value is 10

Real Constant

Constant expression that is a real number. For example:
double d = 34.75; // Real Constant, Representation is "34.75"

String Constant

Constant string expression. For example:

char *pc = "John Doe"; // String Constant, Value is "John Doe"

Template Parameter Constant

A constant template parameter in template class declaration. For example:

template <unsigned N> class Temp{}; // Template Parameter Constant: N

bool Constant

A constant value of true or false.

enum Constant

An enum identifier declared in body of enum declaration. For example:

enum E { A, B, C};    // enum Constant: A, B, C

nullptr constant

A pointer literal of type std::nullptr_t. ExampleFor example:

int* pi = nullptr; // nullptr constant

bool b = (pi == nullptr); // nullptr constant

Declarations

Anchor
Imaginary Unit Constant
Imaginary Unit Constant
Imaginary Unit Constant

Macros that expand to constant expression of type const float _Complex, with the value of the imaginary unit. For example:

#include <complex.h>
void f1( void )
{
  I;            // Imaginary Unit Constant
  _Complex_I;   // Imaginary Unit Constant
}

Declarations

Nodes Nodes representing various declarations in user code.

...

Table of Content Zone
maxLevel3
minLevel3
locationtop

Explicit Template Instance

Explicit template instances for types, functions and variables. For example:

Code Block
template <typename T> void func(){}
template void func<int>(); // Explicit Template Instance
template <typename T> class C { T m1; };
template class C <int>; // Explicit Template Instance

Friend

Friend function declaration. For example:

Code Block
void friendFunc();
class Foo {
public:
    friend void friendFunc();     // Friend
};

Functions

Function declarations. This includes Global and Member functions..

Global Function

Global function declaration. For example:

Code Block
void globalFunc1();  
   // Global Function, IsDecl is true
   // IsImplementation is false
   // HasVoid is true	
void globalFunc2() { }     
   // Global Function, IsDecl is true
   // IsImplementation is true
   // HasEllipsis is true

Member Function

Member function declaration. For example:

Code Block
class Foo {
public:
	Foo () {};	  // Member Function, IsDefaultConstructor is true
	void func();  // Member Function	
};

Parameter

Parameters include parameter and this.

Parameter

Function parameter declaration. For example:

void func(int i); // i is parameter whose type is int

This

Parameter usage. For example:

Code Block
class T{
T* func(T t){return this; } //this parameter
}

Anchor

Variables

Variables include global, local, and member variables.

Global Variable

static_assert
static_assert
static_assert 

Static assertion declarationGlobal Variable. For example:

Code Block
static_assert(sizeof(int) global;    // Global Variable, IsDecl is true
global = 3;== 8, "Incorrect size of int type");
    // GlobalCondition Variable,property IsDecl is false

Local Variable

Local Variable. For example:

Code Block
void func() {points to: sizeof(int) == 8
   int local;   // LocalMessage property points to: "Incorrect size of int type"

Variables

Variables include global, local, and member variables.

Global Variable

Global Variable. For example:

Code Block
int global;    // Global Variable, Variable, IsDecl is true
   localglobal = 3;    // LocalGlobal Variable, IsDecl is false
}
Member

Local Variable

Member Local Variable. For example:

Code Block
classvoid Foofunc() {
public:
  Foo() int local;   // Local Variable, IsDecl is true
   local = 3;   // Local Variable, IsDecl is false
}

Member Variable

Member Variable. For example:

Code Block
class Foo {
public:
  Foo() : member(0) { }  // Member : member(0) { }  // Member Variable, IsDecl is false
private:
  int member;            // Member Variable, IsDecl is true
};

...

Table of Content Zone
maxLevel3
minLevel3
locationtop

Assignment

Includes all expression nodes used for assignment.

++a

Preincrement expression. For example:

Code Block
int i = 1;
++i;            // Preincrement ++a

--a

Pre-decrement expression. For example:

Code Block
int i = 1;
--i;            // Predecrement --a

a%=b

Mod-equals operator expression. For example:

Code Block
int i = 2;
int j = 3;
j %= i;        // Mod-equals a%=b

a&=b

Bitwise-and-equals operator expression. For example:

Code Block
int i = 2;
int j = 3;
j &= i;        // Bitwise-and-equals a&=b

a*=b

Multiply-equals operator expression. For example:

Code Block
int i = 2;
int j = 3;
j *= i;       // Multiply-equals a*=b

a++

Post increment expression. For example:

Code Block
int i = 1;
i++;                     // Postincrement a++

a+=b

Plus-equals operator expression. For example:

Code Block
int i = 1;
int j = 0;
j += i;                  // Plus-equals a+=b

a--

Post decrement expression. For example:

Code Block
int i = 1;
i--;                    // Postdecrement a--

a-=b

Minus-equals operator expression. For example:

Code Block
int i = 1;
int j = 0;
j -= i;                  // Minus-equals a-=b

a/=b

Divide-equals operator expression. For example:

Code Block
int i = 4;
int j = 2;
j /= i;                  // Divide-equals a/=b

a<<=b

Left-shift-equals operator expression. For example:

Code Block
int i = 2;
int j = 3;
j <<= i;                // Left-shift-equals a<<=b

a=b

Assignment operator expression. For example:

Code Block
int i = 1;
int j = 0;
j = i;                  // Assignment a=b

a>>=b

Right-shift-equals operator expression. For example:

Code Block
int i = 2;
int j = 3;
j >>= i;                // Right-shift-equals a>>=b

a^=b

Bitwise-xor-equals operator expression. For example:

Code Block
int i = 2;
int j = 3;
j ^= i;                  // Bitwise-xor-equals a^=b

a|=b

Bitwise-or-equals operator expression. For example:

Code Block
int i = 2;
int j = 3;
j |= i;                  // Bitwise-or-equals a|=b

Bitwise

Expressions involving non-assignment bitwise operators.

a&b

Bitwise 'and' expression. For example:

Code Block
int z = 73, y = 0;
y = z & 0x0f;          // Bitwise 'and' a&b

a^b

Bitwise XOR expression. For example:

Code Block
int z = 73, y = 0;
y = z | 0x0f;          // Bitwise XOR a^b

a|b

Bitwise 'or' expression. For example:

Code Block
int x = 73, y = 0;
y = x | 4;              // Bitwise 'or' a|b

~a

Bitwise 'not' expression. For example:

Code Block
int a = ~3;            // Bitwise 'not' ~a

Comparison

Expressions that compare values.

a!=b

Not-equal operator expression. For example:

Code Block
bool func(int x) {
    if (x!=3) {        // a!=b
        return false;
    }
    return true
}

a<=b

'Less than or equals' expression. For example:

Code Block
bool func(int x) {
    if (x <= 3) {       // a<=b
        return false;
    }
    return true
}

a<b

'Less than' expression. For example:

Code Block
bool func(int x) {
    if (x<3) {            // a<b
        return false;
    }
    return true
}

a==b

Equality operator expression. For example:

Code Block
bool func(int x) {
    if (x==3) {          // a==b
        return false;
    }
    return true
}

a>=b

'Greater than or equals' expression. For example:

Code Block
bool func(int x) {
    if (x >= 3) {       // a>=b
        return false;
    }
    return true
}

a>b

'Greater than' expression. For example:

Code Block
bool func(int x) {
    if (x > 3) {        // a>b
        return false;
    }
    return true
}

Logical

Comparison expressions involving logical operators.

!a

Logical 'not' expression. For example:

Code Block
bool func(int x) {
    if (!x) {              // !a
        return false;
    }
    return true
}

a&&b

Logical 'and' expression. For example:

Code Block
bool func(int x, int y) {
    if (x && y) {       // a&&b
        return false;
    }
    return true
}

a||b

Logical 'or' expression. For example:

Code Block
bool func(int x, int y) {
    if (x || y) {             // a||b
        return false;
    }
    return true
}

Miscellaneous

Miscellaneous expressions that don't fit in other categories.

&a

Address of expression. For example:

Code Block
int i = 0;
int *j = &i;               // &a

*a

Dereference expression. For example:

Code Block
int *i = new int();
*i = 5;                    // *a

a->b

Dereference operator expression. For example:

Code Block
class A {
public:
    int field;
};
 
main() {
    A *a = new A;
    a->field = 1; // Dereference a->b
}

Cast

Anchor
alignof
alignof
alignof

Alignment of type (alignof in C++11 or _Alignof in C11). For example:

Code Block
size_t a = alignof(int); // alignment of type int

Cast

Expression that casts from one type Expression that casts from one type to another. For example:

Code Block
void func() {
    char c = 'c';
    int i = (int)c;  // normal (C-style) cast
}style) cast
}

Anchor
generic_association
generic_association
Generic Association

A generic association in a generic selection. For example:

Code Block
_Generic((X)
, int: f_int // Generic association
, float: f_float // Generic association
, default: f_other // Generic association
)

Anchor
generic_selection
generic_selection
Generic Selection

A C11 generic selection expression. For example:

Code Block
int is_int = _Generic(10, int: 1, default: 0); // Generic expression

GNU Statement Expression

A compound statement enclosed in parentheses that may appear as an expression in GNU C. For example:

Code Block
int foo();
void bar(int p){
 p=({/* GNU Statement Expression start */
  int y = foo ();
  int z;
  if(y>0)z = y;
  else z = -y;
  z;
 });
}

Initializer List

Expression containing initializations, used in member functions. For example:

Code Block
class Foo {
public:
   Foo() _x(0), _y(0) {}          // Initializer list
private:
   int _x;
   int _y;
};

Overloaded

An expression using an overloaded operator. For example:

Code Block
#include <iostream.h>
void func()
{
   cout << "Hello, how old are you?"   // Overloaded <<
        << endl;                       // Overloaded <<
   int age;
   cin >> age;                         // Overloaded >>
}

Label

Label in goto statement. For example:

Code Block
void func()
{
	int i;
	goto label1; //label with name 'label1'
	| := 0;
label1:
	|:=1;
}

a(b)

Function call expression. For example:

Code Block
void foo(int i) {}
void bar(int x) {
    foo(x);      // Function call a(b).
                 // Left Hand Side is Function foo,
                 // Right Hand Side is Parameter x
}

a,b

Compound statement list. For example:

Code Block
void func() {
    for (int i = 0; i >=0, i < 10; i++) {  
       // a,b in for condition
    }
}

a->*b

Arrow-star expression used in pointers to member functions. For example:

Code Block
class Foo {
public:
   void func();
};
typedef void(Foo::*mpf)();
void bar(Foo *f) {
  mpf ampf = &Foo::func;
  (f->*ampf)();               // a->*b
}

a.*b

Dot-star expression used in pointers to member functions. For example:

Code Block
class Foo {
public:
   void func();
};
typedef void(Foo::*mpf)();
void bar(Foo f) {
  mpf ampf = &Foo::func;
  (f.*ampf)();                 // a.*b
}

a.b

Dot operator expression. For example:

Code Block
class Foo {
public:
  void func();
  int zzz;
};
int bar() {
  Foo f;
  f.func();                    // a.b
  return f.zzz;                // a.b
}

a::b

Obsolete. Formerly used to represent scope reference expressions. Use ScopePrefix instead.

a?b:c

Ternary operator expression. For example:

Code Block
bool func(int x) {
  return x ? true : false;    // Ternary operator a?b:c
}

a[b]

Array reference. For example:

Code Block
char array[] = "John Doe";
char c = array[0];            // array reference a[b]

asm

Inlined assembly expression. For example:

Code Block
void func() {
   asm(mov eax, ebp);         // asm
}

delete

Delete operator expression. For example:

Code Block
int *i = new int();
delete(i);                    // delete

ellipses (...)

Ellipses expression used for catch parameters. For example:

Code Block
void func() {
  try {
  } catch(...) {}             // catch parameter is (...)
}

new

New operator expression. For example:

int *i = new int[20];   // new

sizeof

Sizeof operator expression. For example:

int *i = malloc(20*sizeof(int));  // sizeof

throw

Throw operator expression. For example:

Code Block
void func() {
   throw;                           // throw
}

typeid

Typeid operator expression used for RTTI. For example:

Code Block
class Shape {};
void f(Shape& r) {
   typeid(r);                       // typeid

noexcept

Noexcept operator. For example:

Code Block
bool func(int x, int y) {
    return noexcept(x + y) || noexcept(func(x, y);
}

Vacuous destructor call

Explicit destructor call for simple types or classes that do not have a type. For simple types, this represents a pseudo-destructor call. For example:

Code Block
struct S {} s;
s.S::~S();
 
typedef int INT;
int i;
i.INT::~INT();

Lambda

Lambda expression. For example:

Code Block
#include <algorithm>
#include <cmath>
void mySort(float* x, unsigned N)
{
std::sort(x, x + N, [](float a, float b)
{ return a < b; }); // Lambda expression
}

Numerical

Numerical expressions that are not assignments.

+a

Positive signed expression. For example:

Code Block
int func(int num) {
   return +num;                // +a
}

-a

Negative signed expression. For example:

Code Block
int func(int num) {
   return -num;                // -a
}

a%b

Modulo expression. For example:

Code Block
int j = 2;
int k = 5 % j;                 // Mod a%b

a*b

Multiplication expression. For example:

Code Block
int j = 1;
int k = 3 * j;                 // Multiplication a*b

a+b

Addition expression. For example:

Code Block
int j = 1;
int k = 3 + j;                 // Multiplication a+b

a-b

Subtraction expression. For example:

Code Block
int j = 1;
int k = 3 - j;           // Subtraction a-b

a/b

Division expression. For example:

Code Block
int j = 2;
int k = 5 / j;           // Division a/b

a<<b

Left-shift expression. For example:

Code Block
int i = 1, j = 1, k = 1;
k = i << j;              // Left-shift a<<b

a>>b

Right-shift expression. For example:

Code Block
int i = 1, j = 1, k = 1;
k = i >> j;              // Right-shift a>>b

...

Table of Content Zone
maxLevel3
minLevel3
locationtop

Block

Block statement. Normally contains other statements. Begins and ends with curly braces. For example:

Code Block
void func() {       // block
}

Case Lable

Represents a case or default label in a switch statement. For example:

Code Block
void func(int i) {
    switch(i) {
    case 1:             // Case Label
        break;          
    case 3:             // Case Label
    default:            // Case Label
        break;
    }
  }

Simple

A statement that does not fall into any other statement category. The simple statement's body usually contains an expression. For example:

Code Block
void func(int & i) {
    i++;            // Simple statement
}

Empty

An empty ; statement. For example:

Code Block
void func() {
    if(true);             // Empty statement
}

break

Break statement. For example:

Code Block
bool bar();
void func() {
   while(1) {
      if (bar()) {
          break;    // break
      }
   }
}

case

Case statement. For example:

Code Block
void func(int i) {
    switch(i) {
    case 1: { break; }  // case
    case 2: { break; }  // case
    }
}

catch

Catch statement used for exception handling. For example:

Code Block
void bar();
void func(int i) {
    try {
       bar();
    } catch (...) {     // catch
    }
}

continue

Continue statement used in loops. For example:

Code Block
bool bar(int);
void func(int i) {
    while(i--) {
       if (bar(i)) {
          continue;     // continue
       }
    }
}

default

Default statement used inside a switch statement. For example:

Code Block
void func(int i) {
    switch(i) {
    case 1: { break; }
    case 2: { break; }
    default: { break; }            // default
    }
}

do

whjile

while

Do while loop statement. For example:

Code Block
void func(int i) {
    do {                            // do while
        i--;
    } while (i);
}

for

For loop statement. For example:

Code Block
void bar();
void func() {
   for (int i = 0; i < 10; i++) {  // for
      bar();
   }
}

for range

Range-based for loop statement. For example:

Code Block
void bar();
void func() {
   for (auto iterator : range_expr) {  // for
      bar();
   }
}

goto

Goto statement. For example:

Code Block
void func(bool done) {
   if (done) {
      goto end;             // goto
   }
   end:
}

if

If statement. For example:

Code Block
void func(bool done) {
   if (done) {             // if
       return; 
   }
}

return

Return statement. For example:

Code Block
int func() {
   return 0;               // return
}

switch

Switch statement. For example:

Code Block
void func(int i) {
    switch(i) {             // switch
    case 1: { break; }
    case 2: { break; }
    default: { break; }
    }
}

try

Try statement. For example:

Code Block
void bar();
void func(int i) {
    try {                  // try
        bar();
    } catch (...) {
    }
}

while

While statement. For example:

Code Block
void func(int i) {
   while (i--) {  // while
   }
}

...

Table of Content Zone
locationtop

Complex

Non-primitive types. This category contains the following types:

Array

Array type. For example:

Code Block
char buf[1024];   
      // buf is Variable of Type Array or Type char.

Builtin

Non-primitive type builtin for a given compiler.

Class

User-defined class type. For example:

class Foo { }; // class

Anchor

decltype

Decltype

decltype

Decltype
Decltype

Type defined with the decltype specifier. For example:

Code Block
int i;
decltype(i) k;            // k is Variable of Type Decltype to Type int.

Enum

User-defined enum type. For example:

enum E { }; //Enum type

Function

Function type. Used for function pointers. For example:

Code Block
void foo(void (*ptr)(int)) {   // ptr is Pointer of Type Function
    ptr(3);
}

Reference

Reference type. Used for passing by reference. For example:

Code Block
void func(int &i) {  // i is Parameter of Type Reference to Type int
   i = 3;
}

struct

Struct type. For example:

struct Foo { }; // struct

Template Parameter

A template parameter in template class declaration. For example:

template <typename T> class Temp{}; // Template Parameter: T

Typedef

Typedef type. For example:

Code Block
typedef int INT;
INT x;            
      // x is Variable of Type Typedef to Type int.

Union

Union type. For example":

Code Block
union MyUnion {   // union
    int x;
    char *y;
};

Primitive

All primitive types. This category contains the following types:

bool

Primitive type bool. For example:

bool b; // b is Variable of Type bool

char

Primitive type char. For example:

char c; // c is Variable of Type char

double

Primitive type double. For example:

double d; // d is Variable of Type double

float

of Type double

Anchor
double complex
double complex
double complex

Type double _Complex. For example:

Code Block
double _Complex fd;   // fd is Variable of Type double _Complex

float

Primitive type float. For example:

float f; // f is Variable of Type float

Anchor
float complex
float complex
float complex

Type float _ComplexPrimitive type float. For example:

Code Block
float
f;
 _Complex fc;   //
f
 fc is Variable of Type float _Complex

int

Primitive type int. For example:

int i; // i is Variable of Type int

long

Primitive type long. For example:

long x; // x is Variable of Type long

long double

Primitive type long double. For example:

long double d; // d is Variable of Type long double

Anchor
long double complex
long double complex
long double complex

Type long double _Complex. For example:

Code Block
long double _Complex fd;   // fd is Variable of Type long double _Complex

pointer

Pointer type. For example:

Code Block
char * name; 
 // name is Variable of Type pointer to type char.

short

Primitive type short. For example:

short x; // x is Variable of Type short

void

Primitive type void. Used for void pointers. For example:

Code Block
void * p; 
 // p is Variable of Type pointer to type void.

wchar_t

Primitive type wchar_t. For example:

wchar_t c; // c is Variable of Type wchar_t

std::nullptr_t

The type of pointer literal. Example:

decltype(nullptr) t; // Variable variable of std::nullptr_t Typetype