C / C ++ポリグロットを書く
このチャレンジのコンセプトは非常にシンプルです。あなたがしなければならないのは、有効なCと有効なC ++の両方としてコンパイルするプログラムを書くことです!まあ、いくつかのキャッチがあります。プログラムは、各言語でコンパイルされたときに異なる動作をする必要があります。「異なる動作」と見なされるためには、プログラムは言語ごとに異なる出力を持っている必要があります。 ルール プログラムは有効なCとC ++の両方である必要があります プログラムには、コンパイルされた言語に基づいて異なる出力が必要です。 #ifdef __cplusplusまたはその他の「簡単な」プリプロセッサトリックは推奨されません。(ただし、他のプリプロセッサ操作はまったく問題ありません。) プログラムが何か異なることをすることを完全に明白に見せないようにしてください。 これは人気コンテストであるため、最も興味深く驚くべきソリューションを持っている人が勝者となります。楽しむ! 例: 私は自分のプログラムを作成して、これが#ifdefトリックを実行することでさえ可能かどうかを確認しました。 #include <stdio.h> #include <string.h> char *m="C++ rules!"; int t[11]={0,0,0,0,1,-1,-3,9,-8,82,0}; char tr(char c,int i) { return c+((sizeof('!')+1)&1)*t[i]; } int main() { int i = 0; for(;i<strlen(m);i++) { printf("%c",tr(m[i],i)); } printf("\n"); return 0; } このプログラムC++ rules!は、C ++およびCでコンパイルされたときに出力C++ stinksされます。 説明: 言語間の違いを引き起こすのはtr()関数です。CとC …