FAQ

QA・C/QA・C++

QA·C/QA·C++に関する

ID.1

Q. CとC++のコードが混在している場合、QA·CとQA·C++のどちらで解析すればよいのでしょうか?

A.


ソースファイルの拡張子が .c の場合はQA·C、拡張子が .cpp (または .C など) の場合はQA·C++で解析してください(理由は後述の説明をご参照ください)。

皆様がソフトウェア開発でお使いになっているC/C++コンパイラは、次の2種類のコンパイル手段を備えています。
  • C言語モードでコンパイルする手段
  • C++言語モードでコンパイルする手段
  • コンパイル手段を切り替える方法は、コンパイラスイートごとに異なり、
  • 呼び出すコンパイラのコマンド自体を切り替える
  • コンパイラに与えるオプションを切り替える
  • コンパイラが拡張子を判別して自動的に切り替える
  • といった方法が用いられています。

    これらの切り替えは、コンパイルするソースファイルごとに行われます。つまり、ある一つのソースファイルはその内容に関わらず、必ずC言語モードとC++言語モードのどちらか一方でコンパイルされます。
    言い換えると、ある一つのソースファイルの中には、(プリプロセッサを通した状態で)C言語に従った構文とC++言語に従った構文のどちらか一方だけしか記述できないということになります。

    「C言語と高い互換性をもつ構文」をC++言語モードでコンパイルされるソースコードの中に記述することはできます。その意味では、「CとC++のコードが混在している」ソースファイルを記述するという表現をすることはできます。
    しかし、この場合に記述できるのはあくまでも『C++言語に従った「C言語と高い互換性をもつ構文」』であって、『C言語に従った構文』ではありません。厳密に言えば「CとC++のコードが混在している」ソースファイルを記述することはできないということになります。

    皆様が開発しているアプリケーションの各ソースファイルには、 .c や .cpp (または .C )といった拡張子が付けられていると思います。通常、拡張子が .c の場合はC言語モード、拡張子が .cpp (または .C )の場合はC++言語モードでコンパイルされることを意図して開発されていて、お使いになっている統合開発環境の大半がこの前提で動作するようになってい るはずです。

    QA·C/QA·C++の開発元であるProgramming Research社は、QA·CをC言語モードに対応するC言語専用のツール、QA·C++をC++言語モードに対応するC++言語専用のツールに位置づけています。コンパイラや統合開発環境と同様にソースファイルの拡張子に従って、QA·CとQA·C++のどちらを使って解析するのかを区別してください。

    << QA·C/QA·C++に関するに関するFAQ一覧へ戻る