C+#pragma onceと#ifndef方式の判別


すべて置かれています.hファイルに二次コンパイルや重複を防止する~~~
#ifndefの方式はマクロ名に依存して衝突できないため、同じファイルが複数回含まれないことを保証するだけでなく、内容が完全に同じ2つのファイルが不注意で同時に含まれないことを保証することができる.もちろん、欠点は、異なるヘッダファイルのマクロ名がうっかり「衝突」すると、ヘッダファイルが存在しているのに、コンパイラが声明が見つからない状況になる可能性があることです.
#ifndef FILE_H
#define FILE_H
//......
#endif FILE_H

#pragma onceは、同じファイルが複数回コンパイルされないことをコンパイラによって保証します.なお、ここでいう「同じファイル」とは、同じ内容の2つのファイルではなく、物理的に1つのファイルを指す.メリットは、マクロ名を考えるのに苦労する必要がないことです.もちろん、マクロ名の衝突による奇妙な問題は発生しません.対応する欠点は,あるヘッダファイルに複数のコピーがある場合,本手法が重複して含まれないことを保証できないことである.もちろん、マクロ名の衝突による「宣言が見つからない」という問題よりも、繰り返し含むほうが発見されやすく、修正されやすい.
#pragma once

方式1は言語でサポートされているので移植性がよく、方式2は名前の衝突を避けることができる.
#pragma once方式は#ifndef以降に発生するため、多くの人が聞いたことがないかもしれません.
現在のところ、ifndefはさらに推奨されている.#ifndefは言語の生まれつきのサポートを受けているため、コンパイラの制限を受けません.一方、pragma once方式は古いバージョンのコンパイラにサポートされていません.言い換えれば、互換性が十分ではありません.もしかしたら、あと数年で古いコンパイラが死に絶えてしまうかもしれませんが、いったいどれを選ぶかは問題ではありません~~~~