
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
プロトタイプ宣言をしたところで
リンク時の外部シンボルの未解決は直りませんよ。
プロトタイプ宣言は「こういう関数がありますよ」というだけで
その関数の実態があるかないかはまた別の話です。
プロトタイプ宣言で関数の実態まで勝手に作ってくれる
なんてことはありません。
No.2
- 回答日時:
それよりも対象のOSで使えない関数は使わないとか、VC++なら_WIN32_WINNT や WINVERマクロを設定し、その値を見て処理を切り分けるとかにしたほうがいいように思えます。
また、例示の Win7OnlyEx の場合、
DWORD MyWin7OnlyEx(LPTSTR p)
{
#if defined(WINVER) && WINVER >= 0x601
return Win7OnlyEx(p);
#else
return 0; // あるいは何らかのエラー値を返す
#endif // defined(WINVER) && WINVER >= 0x601
}
とラップして、Win7OnlyEx の代わりにこの関数を呼び出すようにするという手があります。
参考URL:http://homepage1.nifty.com/herumi/prog/gcc-and-v …
No.1
- 回答日時:
可能/不可能?だけを考えれば、ヘッダファイル(*.h)はソースファイル(*.c/*.cpp)にインクルードして使用するものですから、ソースファイルにその内容を直接記述することは可能です。
しかし、何故プロトタイプ宣言がヘッダーファイルに分離されているかを考えれば、プロトタイプ宣言をソースファイル内に書くことはやらないほうが賢明でしょう。問題点(外部シンボルの未解決)に対して対策(プロトタイプ宣言のソースファイルへの記述)が正しくないように思われます。
コンパイラのバージョンによって処理を変更する場合、コンパイラの定義済みのマクロによって条件コンパイルを行うようにヘッダ/ソースファイルを記述すべきです。
たとえばVisuall C++ではコンパイラのバージョン番号として _MSC_VER が定義されているので、条件コンパイルに使用できます。
#if _MSC_VER < 1500 // VC++ 2005(?)以下
...(対象のバージョン以下のの記述)
#else
...(対象のバージョン以上のの記述)
#endif
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
” OS ビルド ” の意味が分か...
-
VBAを何回も作り直して、容量が...
-
エクセルVBAではRound...
-
Makefile作成時の拡張子.oとは?
-
マクロ コンパイルがグレーバック
-
ExcelVBAで『ByRef 引数の型が...
-
「fatal error C1189」を回避す...
-
Visual Studio .net ヘッダーフ...
-
【VC++6.0(MFC)】警告「LINK : ...
-
C言語でヘッダファイルにグロー...
-
GetStockObject()で未定義エラ...
-
c言語 文字列の比較
-
Emacsでのgccのインクルードパ...
-
NETCOBOLのサブプログラムについて
-
Microsoft の Visual C++ サン...
-
VB5の逆コンパイルについて
-
右クリックメニューについて
-
[c++] <pthread.h>がinclude で...
-
ヘルプファイルをWordに変換したい
-
プリコンパイルエラーについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
” OS ビルド ” の意味が分か...
-
VBAを何回も作り直して、容量が...
-
エクセルVBAではRound...
-
C言語でヘッダファイルにグロー...
-
Makefile作成時の拡張子.oとは?
-
「fatal error C1189」を回避す...
-
ILSpyで、デコンパイルできない。
-
外部シンボル "_main"は未解決です
-
PRO*C コンパイルエラー
-
1 つ以上の複数回定義されてい...
-
C++コンパイル時に『 C1083: in...
-
マクロ コンパイルがグレーバック
-
クリティカルエラー Expressio...
-
VB6とInputManソフトの関係
-
セミコロンについて
-
VB6で開発中…標準モジュール間...
-
ビルドとリビルドの違いを教え...
-
ExcelVBAで『ByRef 引数の型が...
-
windowsでLinuxで作成したソー...
-
コンパイルエラー:ユーザ定義...
おすすめ情報