代替トークンを使ってC++っぽくないC++コードを書く


このエントリーをはてなブックマークに追加

C/C++には代替トークン(alternative tokens)なるものがあることを知った。まず下のコードを見てほしい。

%:include <iostream>

using namespace std;

int main() <%

    int array<:100:>;
    for (int i = 0; i < 100; ++i) <%
        array<:i:> = i;
        if ( i % 3 == 0 and (not i % 5 == 0)) <%
            cout << i << ", ";
        %>
    %>

    return 0;
%>

まるでC++に見えないコードだが、きちんとgccコンパイルできる。これは以下のコード

#include <iostream>

using namespace std;

int main() {

    int array[100];
    for (int i = 0; i < 100; ++i) {
        array[i] = i;
        if ( i % 3 == 0 && !(i % 5 == 0)) {
            cout << i << ", ";
        }
    }

    return 0;
}

を、代替トークンを使って書き換えたものである。

代替トークンとは、一部の演算子や記号のように、環境によっては入力が難しい表現を、他の表現でも書けるようにしたものらしい。例えば、'{' と書く代わりに '<%' と書いても等価となる。もっとも、現在でも#や!が入力できないキーボードが本当に存在するのか疑わしいが…。