• ベストアンサー

【C++】使わないinclude

(1)使わないincludeをチェックしたいです。 (できれば前方宣言しているclassも) visual studioを使っていますが、 visual studioではなく、ツールでもいいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

まず、全てコメントにしてコンパイルしてみたら? エラーが出たらメッセージに従ってコメントを外していけばわかるよね。 まぁ、コンパイルして実行形式にしたら不要な部分は削除されてしまうので、 気にすることもないですけどね。

TeferiMage
質問者

お礼

ありがとうございます。 もっと楽な方法がないかなと思っていたのですが、 コメントアウト&コンパイルでも、 そこまで手間ではないのかもしれません。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#208507
noname#208507
回答No.3

静的解析ツールの仕事だと思いますが,C++test や Rational Software Analyzer といったソフトには,使わない include を検出してくれる機能はなさそうですね. AdLintは未使用のincludeもチェックしてくれますが,これはC言語用のツールでC++には使えませんし... あるいはQAC++なら可能かもしれませんが,このソフトは試したことがありません. 結局,No.1 さんのいうように地道にコメントアウトしてコンパイルしてみる事が近道かもしれませんね. http://www.techmatrix.co.jp/quality/ctest/staticanalysis/index.html http://www.sra.co.jp/Rational/product/test/RSAR.html http://www.toyo.co.jp/ss/qacpp/ http://adlint.sourceforge.net/

TeferiMage
質問者

お礼

ありがとうございます。 不要な#includeを洗い出すという目的ではなさそうですが、 C++test Rational Software Analyzer AdLint QAC++ などのツールは、色々と面白そうです。 時間があれば使ってみようと思います。

全文を見る
すると、全ての回答が全文表示されます。
noname#190876
noname#190876
回答No.2

雲古ソフト作成の鉄則は、むやみやたらと、無駄なものがつめこんであって、意味不明なものが、いっぱいということですが、我が国の重層的カースト制度のデジタル土方社会では、仕事保障の為に、この鉄則を守っていることが多いようです。  で、無駄なincludeとは、その中身が、使われていない、ということですが、それを検出するために、使えるツールのひとつに、  GNU Global があります。たしか、多摩通信社とかいうところが配布してました。これは、クラス、変数の宣言をHTMLタグ付けをおこなうものです。ですから、#includeのファイル中身をひらいて、HTMLタグ付されていないなら、それは、そのソフトの中で、全然、使われてない変数、クラスとわかるわけです。  #include ファイルをとおして、全然タグづけされているものがないなら、その#include は、要らないでしょう。  ということで、雲古ソフト対策に、この方法は、結構使えると思います。

TeferiMage
質問者

お礼

ありがとうございます。 GNU Global、多摩通信社ですか。 面白そうなソフトですが、 出力結果を確認するという意味では、 #include のコメントアウトでも同じそうなので、 地道に#include のコメントアウトの方が良さそうです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • include無しにclassが書けない

    粗末な質問タイトルで申し訳ありません。 Visual C++2010で、includeを書かずにclass宣言を行おうとすると「Error:PCH警告」が発生します。 この理由をご教授ください。 IntelliSense: PCH 警告: 適切なヘッダー停止位置が見つかりません。 というエラーメッセージが表示されるのですが、これはプロトタイプ宣言がないときに発生する警告らしいですね。私が書こうとしているソースコードを次に示します。 -----main.cpp---- class TestClass {}; int main(void) { return (0); } ----------------- このソースで、"class"の部分に赤波線が引かれて先述のエラーメッセージが表示されます。 このソースの先頭に#include<iostream>なり#include<stdlib.h>なり何かインクルードを記述すると警告はなくなります。 しかしクラスはその枠のみですし、ライブラリ関数も何も使用していないのでとくに必要なインクルードファイルも何もないと思うのですが、どうしてこのようなエラーが発生するのでしょうか。 あと、蛇足になりますが、本来はクラス宣言部分を別のヘッダーファイルに分けたいのです。 クラス宣言部分を別のヘッダーに分離してヘッダーの先頭に #pragma once を記述するか、分離したヘッダをmain.cpp内でインクルードしてもエラーは解消されます。 (何からもインクルードされなかったらエラーになる) もう何が何やらさっぱりわからないです><

  • IncludeではなくClassで宣言するケース

    C++で、IncludeではなくClassで宣言すべきとき/Classで宣言した方が良いときとはどのようなときなのでしょうか? ※クラスの相互参照のケース以外について知りたいです。

  • C++ includeファイルの検索

    以下のサイトを参考にC++の勉強をしています。 http://www.kab-studio.biz/Programing/Codian/MxA/09.html 残念ながら上記サイトにはどのファイルをインクルードすれば いいのか記述されておりません。Visual C++ 2008 Express Editionを 使用しているのですが、インクルードファイルを自動的に検索して ソース上に挿入するような機能はないのでしょうか?

  • Visual Studio 2008コマンドプロンプトのinclude

    Visual Studio 2008コマンドプロンプトのincludeファイルのパス設定について、教えてください。 C言語で書かれたOpencvのサンプルコード「ヒストグラムの描画」を実行するとエラーが出ます。 http://opencv.jp/sample/histogram.html#hist 「fatal error C1083: includeファイルを開けません。'cv.h':No such file or directory.」 画像を表示する、という別のコードはVisual Studioで実行できましたので、Visual Studioの環境設定は正常ではないかと思います。 環境変数のパスの設定や(マイコンピュータ→システムのプロパティ→詳細→環境変数)、Visual Studioでのライブラリやインクルードファイルの設定も完了しており(ツール→オプション→プロジェクトおよびソリューション)、Visual Studio 2008のIDE環境でビルトすると、別のサンプルコードは実行できました。このふたつめのサンプルコードは一瞬コマンド画面が表示されて、何も結果が出ずに消えてしまいます。 なぜでしょうか? D/Lし直したり、設定しなおしましたが、事象は変わらずとても困っています。 もし何かお心当たりがあればぜひ教えてください。 どうぞ宜しくお願い致します。

  • iostream インクルード時に発生するエラー

    C++ の勉強をするためにVisualStudio2008にて下記コードをビルドしたのですが、エラーが発生してビルドが失敗しました。 ■ コード #include <iostream> using namespace std; int main() { std::cout << "Hello World !"; return 0; } ■ 操作 空のコンソールアプリケーションを作成し、ソースファイルに追加>新しい項目 にて "temp.cpp" を追加、コードを入力。その後 ビルド > ソリューションのビルド を実行。 ■ エラー(一部) >> 「説明」 列 warning C4985: 'strlen': 前の宣言に属性が存在しません。 error C2039: 'wmemcpy_s' : '`global namespace'' のメンバではありません。 error C3861: 'wmemcpy_s': 識別子が見つかりませんでした error C2039: 'wmemmove_s' : '`global namespace'' のメンバではありません。 error C3861: 'wmemmove_s': 識別子が見つかりませんでした error C2039: 'memcpy_s' : '`global namespace'' のメンバではありません。 error C3861: 'memcpy_s': 識別子が見つかりませんでした error C2039: 'memmove_s' : '`global namespace'' のメンバではありません。 >>対応する「ファイル」列 d:\program files\microsoft visual studio 9.0\vc\include\exception d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd プロジェクトのプロパティやインストール時の構成などで何か問題があるのでしょうか。VisualStudio以外にはWindows SDK 、Windows SDK 6.0A、SQL Server2005などが導入されています。 再インストールするのもありかと思ったのですが、原因が分からないとまた同じ現象が発生しそうなため踏み切れません。 よろしくお願いします。

  • VBに、Cのincludeのようなものありますか?

    Cでは、 include<ファイル名.h> のように、自作の定義ファイルを読み込み事が出来ますが、 Visual BASICでは、できないでしょうか?

  • ポインタによる包含&ヘッダにincludeしない、 場合でtemplateの定義に…

    class Bの宣言をしているヘッダ中で class A; を、前方宣言し、そのポインタだけを持たせ、ソースファイルのほうにclass Aの中身が分かるように、#includeして、ソースファイルに関数の実装やstatic変数の定義を書いていた、とします。 しかし、templateを使う関数についてはコンパイル時に解決できないといけないので、それだけはヘッダに持ってきました。 その時 includeが一切書かれていない、class Bのヘッダ内において class Aのメンバを参照するようなコードを書いたとき クラス外、クラス内、いずれに書いても 正常にコンパイルできました。 通常の関数では当然無理なので、もともとtemplateがコンパイル時解決を強要するものなのでそういう仕様にしててくれてると考えられますが 1.これは、C++の標準仕様でしょうか?それとも処理系依存でしょうか? あと、templateに関して 2.特殊化ならソースにかけるのは標準仕様でしょうか?それとも処理系依存でしょうか?

  • C2146を回避するにはどうしたら良いのでしょうか

    いつもここにお世話になってますm(__)m。今回は下記の様なエラーが出てしまい、困っております(--;)。 <エラー内容> 1>C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C2146: 構文エラー : ';' が、識別子 'PVOID64' の前に必要です。 1>C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません エラーが起こっているのはwinnt.h内の「typedef void * POINTER_64 PVOID64;」という部分なのですが(他にもありますが)、winnt.hは弄ってないのです。 ネットで検索したところインクルードファイルディレクトリの指定の順番が怪しそうなので、「ツール」「オプション」でPlatformSDK関連が一番上に来るように変更(実行可能ファイル、インクルードファイル、ライブラリファイル)してリビルドしてみましたが結果は変わりませんでした。 他にチェックすべき点をお教え頂けると助かります。 [環境] ・WindowsXP(SP2) ・Visual Studio 2005 Professional(C++、SPなし)

  • C++のiostreamのインクルードが不可能です

    C++のiostreamのインクルードが不可能です。 とても初歩的な話でお恥ずかしいのですが、 Visual Studio 2012 Express for Windows DesktopにてC++の入門をしようとしている者です。 入門書の通り、iostreamをインクルードしてnamespaceをstdにして int main() { cout << "Hello, World!" << endl; return 0; } このようなHello,World!コードを作ったのですが、エラーが発生し、 ・ソースファイルを開けません "iostream" ・識別子 "cout", "endl" が定義されていません と表示され、デバッグエラーとなります。 プロジェクトの作り手順としては C++の空のプロジェクトからcppファイルをソースファイルに追加する手順です。 どなたか解決方法をご教授ください。

  • 「fatal error C1189」を回避するには?

    かなりの初心者でございますm(__)m。 先日のことですが「Visual Studio .net 2003」から「Visual Studio 2005」へアップグレード(というよりは切り替え)を行いました。 すると2003では問題なくビルド出来たものが2005では「fatal error C1189」が出てしまい困っております。 エラーメッセージ fatal error C1189: #error : Need to include strsafe.h after tchar.h 確かにtchar.hはインクルードしているので、これを文字通りに解釈して後にstrsafe.hをインクルードしたのですが、メッセージは変わらず(--;)。 どの辺りをチェックしたら良いか教えていただけると助かります。 OSはXP、VisualStudioのSP1はあてていません(エラーでSP1がインストール出来ないため)。

このQ&Aのポイント
  • TS5330のパソコンからの印刷ができない問題について解決方法を教えてください。
  • パソコンからの印刷でTS5330プリンターが処理中のまま止まってしまいます。接続別の端末では印刷はできますが、パソコンではオンラインで認識されているため原因がわかりません。
  • キヤノン製のTS5330プリンターを使用していますが、パソコンから印刷が進まずに困っています。どなたか解決策を教えていただけないでしょうか。
回答を見る