ようこそ 屋根裏部屋 mkII へ ログイン | 登録 | ヘルプ

Technological

ちょっとしたTIPSや私がはまったこと、調べたことなんかを書いていきます。

C/C++でObsolete属性っぽいこと

C#(.NET Framework)の[Obsolete]属性を見たとき、「ああ、C/C++にも欲しいなー」と痛切に思いました。APIが変わったり、実装を変更して、こっちを使って欲しい…といった場合、メールの告知や仕様書の改編では絶対に見てもらえない人がいるから。

ところが、似たような物はちゃんとあるんですね。たとえば、Visual C++ 2005でstrcpyを使うとC4996という警告が出ます。

1
2
TCHAR Dummy[256];
strcpy(Dummy, TEXT("Dummy"));

警告 2 warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. (以下ソース位置)

これはヘッダファイルで

#pragma deprecated("strcpy")

というプラグマ(実際はstrcpyの実体の関数。マクロ展開しているだけみたい)が定義されているために発生します。私自身は直接CRTの関数をもう10年くらい使っていないので知りませんでした(使うときはlstrcpyを使ってます)。このdeprecatedプラグマ、Visual C++ 2005からかと思ったら、Visual C++ 2003から追加されているんですね。

この警告を出したくない場合は上にあるように、_CRT_SECURE_NO_WARNINGSを定義すればいいようですが…やめましょうね。とはいえ、これが堂々と手順書でまわっていそうな気がする。

公開 2007年4月16日 22:53 投稿者 kkamegawa
タグ , ,

コメントの通知

この投稿にコメントが付いた場合にメールを受信するには、登録してください。ここ

また次のフィードから、お気に入りのRSSリーダーを使って最新の状態を知ることもできます。 コメントのRSSフィード

コメント

# re: C/C++でObsolete属性っぽいこと @ 2007年7月16日 15:07

strcpy_s が標準ならばやめましょうねでいいんですが... 正直、オレ標準を押し付けるのはやめて欲しいです>MS. ということで、私は _CRT_SECURE_NO_WARNINGS をデフォにしてます. 他のC言語処理系とコンパチにするためにはしょうがないですよね.

c-yan

# re: C/C++でObsolete属性っぽいこと @ 2007年7月17日 1:06

私はMSの処理系以外向けには書かないので(^^;。

_CRT_SECURE_NO_WARNINGSでセキュアに書ける人ばかりならいいのですが。

kkamegawa

どのような感想ですか?

(必須) 
必須 
(必須) 
Powered by Community Server, by Telligent Systems