Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語プログラミングの意外な事実5選 ― 知ると楽しくなる仕様のトリビア

C言語には、一見すると奇妙に見えるのに、実際には言語仕様として正しい動作をするユニークな特徴がいくつか存在します。この記事では、Cプログラミングに関する興味深い事実を、実際のコード例と実行結果とともにわかりやすく解説します。

1. switch文のcaseラベルはif-else文の中に置ける

switch文のcaseラベルは、実はif-else文の中に配置することも可能です。caseラベルは単なるジャンプ先の目印(ラベル)にすぎないため、構文上許される位置であれば自由に書けるのです。

サンプルコード

#include <stdio.h>
main() {
    int x = 2, y = 2;
    switch(x) {
        case 1:
            ;
            if (y==5) {
                case 2:
                    printf("Hello World");
            }
            else case 3: {
                //case 3 block
            }
    }
}

実行結果

Hello World

2. 配列アクセスは「index[array]」という逆順でも同じ結果になる

C言語では、array[index]index[array] と書き換えても同じように動作します。その理由は、配列要素へのアクセスがポインタ演算によって行われるからです。array[5] の値は *(array + 5) と等価ですが、加算は順序に依存しないため、*(5 + array) すなわち 5[array] でもまったく同じ意味になります。

サンプルコード

#include <stdio.h>
main() {
    int array[10] = {11, 22, 33, 44, 55, 66, 77, 88, 99, 110};
    printf("array[5]: %d\n", array[5]);
    printf("5[array]: %d\n", 5[array]);
}

実行結果

array[5]: 66
5[array]: 66

3. 角括弧や波括弧の代わりにダイグラフ(二字句)が使える

C言語では、<::> を角括弧 [ ] の代わりに、<%%> を波括弧 { } の代わりに使用できます。これらは「ダイグラフ(digraph)」と呼ばれる代替表記で、特定の文字が入力しにくいキーボード環境のための機能です。

サンプルコード

#include <stdio.h>
main() <%
int array<:10:> = <%11, 22, 33, 44, 55, 66, 77, 88, 99, 110%>;
printf("array[5]: %d\n", array<:5:>);
%>

実行結果

array[5]: 66

4. #includeを予想外の場所に書いても動くことがある

#include はプリプロセッサによる単純なテキストの挿入を行うため、通常とは異なる場所に書いてもコンパイルできる場合があります。例えば、「The Quick Brown Fox Jumps Over The Lazy Dog」という1行だけが書かれたファイル abc.txt を用意し、printf文の直後にインクルードすると、その内容が出力されます。

サンプルコード

#include <stdio.h>
main() {
    printf
    #include "abc.txt" ;
}

実行結果

The Quick Brown Fox Jumps Over The Lazy Dog

5. scanf()で %*d を使えば入力を読み飛ばせる

scanf() の変換指定子に * を付けると、その入力値を読み飛ばして変数へ代入しないようになります。不要な入力を捨てたい場合に便利なテクニックです。

サンプルコード

#include <stdio.h>
main() {
    int x;
    printf("Enter two numbers: ");
        scanf("%*d%d", &x);
    printf("The first one is not taken, the x is: %d", x);
}

実行結果

Enter two numbers: 56 69
The first one is not taken, the x is: 69

まとめ

これらの事実は、C言語の歴史的背景や仕様の柔軟性を物語る興味深い例です。実務のコードで積極的に使うべきものではありませんが、言語の内部動作への理解を深める良い題材になります。ぜひ自分の環境で試してみてください。

  1. 知って驚く!バイオテクノロジーの興味深い事実21選

    前回のバイオテクノロジーに関する記事では、バイオテクノロジーとは何か、そしてこれまでの歩みの中で達成されてきたマイルストーンについてご紹介しました。おさらいすると、バイオテクノロジーとは、生物学的な生命体を実用的・産業的に応用する技術を研究する分野です。この技術は主に農業、医療、非食料農業、環境分野で活用されています。 あらゆる技術には、それにまつわる驚きの事実が隠されています。バイオテクノロジーも例外ではありません。思わず目を見開いてしまうような事実の数々を、今回はご紹介します。 バイオテクノロジーの驚きの事実21選 1. バイオテクノロジーには4つの「色」がある 少し奇妙に聞こえるかもしれ

  2. 知られざるビットコインの驚きの事実9選|サトシ・ナカモトの謎からFBIの保有額まで

    ネット上には、技術的な解説から面白い雑学まで、ビットコインに関する記事が数多く存在します。今回は、あまり知られていないビットコインの興味深い事実を9つ厳選してご紹介します。それでは早速、順番に見ていきましょう。 1. 本物のサトシ・ナカモトは誰なのか? 「サトシ・ナカモト」という名前には、今なお厚い秘密のベールがかけられています。このペンネームの裏にいる本当の人物が誰なのか、誰も確かなことを知りません。初期のホワイトペーパーが公開された時間帯、文章のスタイル、書かれたコードの特徴などを分析し、その出自の手がかりを探る調査が続けられてきました。ビットコイン、ひいてはそれを支えるブロックチェーン