2005でも6.0でも使用可能なプログラムを作成しているのですが,2005では strcpy_s を使い,6.0ではstrcpyを使っています.
現在は #define strcpy_s strcpy を使い,2005で使うときには自分で//を加えています.
プログラムの中で2005か6.0か判別するにはどうしたらいいのでしょうか.
例えば,
if(2005だったら){
#define strcpy_s strcpy
}
みたいなことがしたいのですが,可能でしょうか.
どなたか力を貸してください.
定義済みのマクロ
_MSC_VER
で判断するのがよいかと。
今回の場合だと,
#if !defined(_MSC_VER) || _MSC_VER < 1400
#define strcpy_s strcpy
#endif
ってところでしょうか。
うまくできました.ありがとうございます.
しかし
#if _MSC_VER < 1400
だけでもいいような気がするのですが,
!defined(_MSC_VER)
はあったほうがよいのでしょうか.
あと
#if _MSC_VER = 1200
とすると
「プラグマ ディレクティブの後に余分な文字がありました - 改行が必要です」
というエラーメッセージが出ます.
"="は使ってはいけないのでしょうか.
C言語では「=」はイコールではなく代入を表します。
イコールは「==」です。
最初の方ですが、「_MSC_VER」が宣言されて無い場合は値が不定(それとも0かな?)になってしまうので、!defined(_MSC_VER)がいります。
#実際にどういう値になるのかはコンパイラ次第?
!defined(_MSC_VER)を入れているのは,Visual C++以外でも使えるようにするためのものです。
まぁ,コンパイラによっては_MSC_VERを偽装してくる物もありますが……。
わかりました。うまくできました。
YuOさん、CCCさんどうもありがとうございました。
ツイート | ![]() |