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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# メインプログラムに#include <algorithm>を書いて、 そのメインプログラムが // 3 2023/05/02 11:24
- C言語・C++・C# Cのコンパイルでコメントアウトをそのままオブジェクトに保持したい 7 2023/08/01 22:22
- C言語・C++・C# visual studio 2019を使っているのですが、何か間違ったところをクリックしてしまい画像 2 2023/03/06 06:46
- C言語・C++・C# プログラム内から、MIDIファイルの一部分だけを再生する方法 1 2023/02/15 11:08
- C言語・C++・C# VisualStudioでC++クラスを追加するとき、ファイルを所定のフォルダ下につくりたい 3 2023/08/24 17:17
- Windows 7 Windows11のパソコンについて。 11 2022/11/21 22:29
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- PostgreSQL PostgreSQL14.6のSSL対応について 1 2023/01/05 15:42
- Windows 10 Windows11についての質問ー3。 2 2022/12/13 14:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
Makefile作成時の拡張子.oとは?
-
PRO*C コンパイルエラー
-
” OS ビルド ” の意味が分か...
-
エクセルVBAではRound...
-
Borland C++ Compiler 5.5につ...
-
マクロ コンパイルがグレーバック
-
「fatal error C1189」を回避す...
-
C言語でヘッダファイルにグロー...
-
「utime.h が見つからない」エ...
-
exe内に記述したパスワードにつ...
-
timeGetTime関数を使用できません
-
複数のサブディレクトリを一緒...
-
ILSpyで、デコンパイルできない。
-
セミコロンについて
-
定数式とはどういう意味でしょ...
-
ヘッダファイルを使わずに定義...
-
bccでwinmm.libをリンクする方...
-
1 つ以上の複数回定義されてい...
-
C++コンパイル時に『 C1083: in...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
<math.h>があるのにsqrtが・...
-
Makefile作成時の拡張子.oとは?
-
C言語でヘッダファイルにグロー...
-
エクセルVBAではRound...
-
1 つ以上の複数回定義されてい...
-
「fatal error C1189」を回避す...
-
ILSpyで、デコンパイルできない。
-
” OS ビルド ” の意味が分か...
-
外部シンボル "_main"は未解決です
-
セミコロンについて
-
C++コンパイル時に『 C1083: in...
-
マクロ コンパイルがグレーバック
-
[c++] <pthread.h>がinclude で...
-
コンパイルエラー:ユーザ定義...
-
ビルドとリビルドの違いを教え...
-
クリティカルエラー Expressio...
-
sys/types.hの必要性について
-
【VC++6.0(MFC)】警告「LINK : ...
-
PRO*C コンパイルエラー
おすすめ情報