これにより、長いリスト内で要素を移動することによって引き起こされるミスを防ぐことができます。
たとえば、次のようなコードがあるとします。
#include <iostream>
#include <string>
#include <cstddef>
#define ARRAY_SIZE(array) (sizeof(array) / sizeof *(array))
int main() {
std::string messages[] = {
"Stack Overflow",
"Super User",
"Server Fault"
};
size_t i;
for (i = 0; i < ARRAY_SIZE(messages); i++) {
std::cout << messages[i] << std::endl;
}
}
Stack Exchange サイトの最初の 3 部作を示しているので、これは素晴らしいことです。
Stack Overflow
Super User
Server Fault
しかし、それには1つの問題があります。ご覧のとおり、この Web サイトのフッターには、スーパー ユーザーの前にサーバー フォールトが表示されます。誰かが気付く前にそれを修正した方がよいでしょう。
#include <iostream>
#include <string>
#include <cstddef>
#define ARRAY_SIZE(array) (sizeof(array) / sizeof *(array))
int main() {
std::string messages[] = {
"Stack Overflow",
"Server Fault"
"Super User",
};
size_t i;
for (i = 0; i < ARRAY_SIZE(messages); i++) {
std::cout << messages[i] << std::endl;
}
}
結局のところ、行を移動するのはそれほど難しいことではありませんよね?
Stack Overflow
Server FaultSuper User
「Server FaultSuper User」という Web サイトはありませんが、コンパイラは存在すると主張しています。-
ここでの問題は、C には文字列連結機能があり、2 つの二重引用符で囲まれた文字列を記述し、それらを何も使用せずに連結できることです (符号には複数の意味があるため、整数でも同様の問題が発生する可能性があります)。
元の配列の末尾に不要なカンマがあった場合はどうなるでしょうか。まあ、行は移動しますが、そのようなバグは発生しませんでした. コンマのような小さなものを見逃すのは簡単です。すべての配列要素の後にコンマを置くことを覚えていれば、そのようなバグは起こりません。コンマが問題の原因であることがわかるまで、何かをデバッグするために 4 時間を無駄にしたくないでしょう。