6.0でも2005でも使うには

解決


nao  2006-11-22 04:07:53  No: 63654

2005でも6.0でも使用可能なプログラムを作成しているのですが,2005では strcpy_s を使い,6.0ではstrcpyを使っています.
現在は #define strcpy_s strcpy を使い,2005で使うときには自分で//を加えています.
プログラムの中で2005か6.0か判別するにはどうしたらいいのでしょうか.

例えば,
if(2005だったら){
  #define strcpy_s strcpy
}
みたいなことがしたいのですが,可能でしょうか.
どなたか力を貸してください.


YuO  2006-11-22 04:26:05  No: 63655

定義済みのマクロ
_MSC_VER
で判断するのがよいかと。

今回の場合だと,
#if !defined(_MSC_VER) || _MSC_VER < 1400
#define strcpy_s strcpy
#endif
ってところでしょうか。


nao  2006-11-22 21:22:11  No: 63656

うまくできました.ありがとうございます.
しかし
#if _MSC_VER < 1400
だけでもいいような気がするのですが,
!defined(_MSC_VER)
はあったほうがよいのでしょうか.
あと
#if  _MSC_VER = 1200
とすると
「プラグマ ディレクティブの後に余分な文字がありました - 改行が必要です」
というエラーメッセージが出ます.
"="は使ってはいけないのでしょうか.


CCC  2006-11-22 22:01:48  No: 63657

C言語では「=」はイコールではなく代入を表します。
イコールは「==」です。


CCC  2006-11-22 22:05:57  No: 63658

最初の方ですが、「_MSC_VER」が宣言されて無い場合は値が不定(それとも0かな?)になってしまうので、!defined(_MSC_VER)がいります。

#実際にどういう値になるのかはコンパイラ次第?


YuO  2006-11-22 22:09:15  No: 63659

!defined(_MSC_VER)を入れているのは,Visual C++以外でも使えるようにするためのものです。
まぁ,コンパイラによっては_MSC_VERを偽装してくる物もありますが……。


nao  2006-11-22 23:08:02  No: 63660

わかりました。うまくできました。
YuOさん、CCCさんどうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加