-Ci: Bigraph and Trigraph Support

Group

LANGUAGE

Scope

Function

Syntax
  -Ci 
  
Arguments

None

Default

None

Defines

  __TRIGRAPHS__ 
  
Pragmas

None

Description

If certain tokens are not available on your keyboard, replace them with the keywords shown in the following table.

Table 1. Keyword Alternatives for Unavailable Tokens
Bigraph Keyword Token Replaced Trigraph Keyword Token Replaced Additional Keyword Token Replaced
<% } ??= # and &&
%> } ??/ \ and_eq &=
<: [ ??' ^ bitand &
:> ] ??( [ bitor |
%: # ??) ] compl ~
%:%: ## ??! | not !
    ??< { or ||
    ??> } or_eq |=
    ??- ~ xor ^
        xor_eq ^=
        not_eq !=
Note: Additional keywords are not allowed as identifiers if this option is enabled.
Example
  -Ci 
  

The example in the following listing shows the use of trigraphs, bigraphs and the additional keywords with the corresponding `normal' C source code.

Listing: Trigraphs, Bigraphs, and Additional Keywords
int Trigraphs(int argc, char * argv??(??)) ??<
  if (argc<1 ??!??! *argv??(1??)=='??/0') return 0;

  printf("Hello, %s??/n", argv??(1??));

??>

%:define TEST_NEW_THIS 5

%:define cat(a,b) a%:%:b

??=define arraycheck(a,b,c) a??(i??) ??!??! b??(i??)

int i;

int cat(a,b);

char a<:10:>;

char b<:10:>;

void Trigraph2(void) <%

  if (i and ab) <%

    i and_eq TEST_NEW_THIS;

    i = i bitand 0x03;

    i = i bitor 0x8;

    i = compl i;

    i = not i;

  %> else if (ab or i) <%

    i or_eq 0x5;

    i = i xor 0x12;

    i xor_eq 99;

  %> else if (i not_eq 5) <%

    cat(a,b) = 5;

    if (a??(i??) || b[i])<%%>

    if (arraycheck(a,b,i)) <%

      i = 0;

    %>

  %>

%>

/* is the same as ... */ 

int Trigraphs(int argc, char * argv[]) {

  if (argc<1 || *argv[1]=='\0') return 0;

  printf("Hello, %s\n", argv[1]);

}

#define TEST_NEW_THIS 5

#define cat(a,b) a##b

#define arraycheck(a,b,c) a[i] || b[i]

int i;

int cat(a,b);

char a[10];

char b[10];

void Trigraph2(void){

  if (i && ab) {

    i &= TEST_NEW_THIS;

    i = i & 0x03;

    i = i | 0x8;

    i = ~i;

    i = !i;

  } else if (ab || i) {

    i |= 0x5;

    i = i ^ 0x12;

    i ^= 99;

  } else if (i != 5) {

    cat(a,b) = 5;

    if (a[i] || b[i]){}

    if (arraycheck(a,b,i)) {

      i = 0;

    }

  }

}