2018-09-17 10:23
2018-09-17 10:23

C 言語にはダイグラフとよばれる環境により存在しない記号の代替となる記法を提供している。2 文字のトークンで 6 種類ある。

  • <: => [
  • :> => ]
  • <% => {
  • %> => }
  • %: => #
  • %:%: => ##

例えば、以下のような簡単なソースコードがあったとする。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    int hoge[] = { 123 };
    printf("%d\n", hoge[0]);
    exit(0);
}

これは普通に動作するコードです。

$ mkdir -p bin
gcc ./src/main.c -o ./bin/main -Wall
$ ./bin/main.c
123

このソースコードをダイグラフを使ったものに差し替えてみる。

%:include <stdio.h>
%:include <stdlib.h>

int main(int argc, char *argv<::>) <%
    int hoge<::> = <% 123 %>;
    printf("%d\n", hoge<:0:>);
    exit(0);
%>

すると、ふつうにコンパイルできます。

$ mkdir -p bin
gcc ./src/main.c -o ./bin/main -Wall
$ ./bin/main.c
123

トライグラフなるものもあるようだが、gcc ではデフォルトでオフってあるそうです

ところでダイグラフってどういう意味?

ダイグラフ (英語: digraph) 二重音字 合字 Pascal などのコンピュータ言語で記号 1 文字を 2 文字で書き表すこと。例:「(.」→「[」。背景・目的などはトライグラフを参照。

Wikipedia より

Copyright © 53ningen.com