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言語の歴史的背景や仕様の柔軟性を物語る興味深い例です。実務のコードで積極的に使うべきものではありませんが、言語の内部動作への理解を深める良い題材になります。ぜひ自分の環境で試してみてください。
-
知って驚く!バイオテクノロジーの興味深い事実21選
前回のバイオテクノロジーに関する記事では、バイオテクノロジーとは何か、そしてこれまでの歩みの中で達成されてきたマイルストーンについてご紹介しました。おさらいすると、バイオテクノロジーとは、生物学的な生命体を実用的・産業的に応用する技術を研究する分野です。この技術は主に農業、医療、非食料農業、環境分野で活用されています。 あらゆる技術には、それにまつわる驚きの事実が隠されています。バイオテクノロジーも例外ではありません。思わず目を見開いてしまうような事実の数々を、今回はご紹介します。 バイオテクノロジーの驚きの事実21選 1. バイオテクノロジーには4つの「色」がある 少し奇妙に聞こえるかもしれ
-
知られざるビットコインの驚きの事実9選|サトシ・ナカモトの謎からFBIの保有額まで
ネット上には、技術的な解説から面白い雑学まで、ビットコインに関する記事が数多く存在します。今回は、あまり知られていないビットコインの興味深い事実を9つ厳選してご紹介します。それでは早速、順番に見ていきましょう。 1. 本物のサトシ・ナカモトは誰なのか? 「サトシ・ナカモト」という名前には、今なお厚い秘密のベールがかけられています。このペンネームの裏にいる本当の人物が誰なのか、誰も確かなことを知りません。初期のホワイトペーパーが公開された時間帯、文章のスタイル、書かれたコードの特徴などを分析し、その出自の手がかりを探る調査が続けられてきました。ビットコイン、ひいてはそれを支えるブロックチェーン