タグ付けされた質問 「defensive-programming」

23
単一行のifまたはループに中括弧(つまり{})を使用する目的は何ですか?
私は私のC ++講師の講義ノートをいくつか読んでいます、そして彼は以下を書きました: インデントを使用// OK 演算子の優先順位に依存しない-常に括弧を使用する// OK 常に{}ブロックを使用します-1 行の場合でも// OKではありません。なぜですか??? 比較の左側にあるConstオブジェクト// OK > = 0の変数には符号なしを使用します//素敵なトリック 削除後にポインターをNULLに設定-二重削除保護//悪くない 3番目の手法は私にははっきりしていません。1つの行を{ ... }? たとえば、次の奇妙なコードを見てください。 int j = 0; for (int i = 0 ; i < 100 ; ++i) { if (i % 2 == 0) { j++; } } そしてそれを次のものに置き換えます: int j = 0; …

20
Debug.Assert()はいつ使用する必要がありますか?
私は約1年間プロのソフトウェアエンジニアとして、CSの学位を取得しています。私はC ++とCでアサーションについてしばらく知っていましたが、最近までC#と.NETにアサーションが存在することをまったく知りませんでした。 私たちのプロダクションコードにはアサートがまったく含まれておらず、私の質問はこれです... 製品コードでアサートの使用を開始する必要がありますか?もしそうなら、いつその使用が最も適切ですか?行う方が理にかなっていますか Debug.Assert(val != null); または if ( val == null ) throw new exception();

14
C ++で機密性の高い文字列を不明瞭にする手法
C ++アプリケーションに機密情報(秘密にしたい対称暗号化キー)を保存する必要があります。単純なアプローチはこれを行うことです: std::string myKey = "mysupersupersecretpasswordthatyouwillneverguess"; ただし、stringsプロセス(またはバイナリアプリから文字列を抽出するその他のプロセス)を介してアプリケーションを実行すると、上記の文字列が表示されます。 そのような機密データを不明瞭にするためにどのようなテクニックを使用すべきですか? 編集: もちろん、皆さんのほとんどが「実行可能ファイルをリバースエンジニアリングできる」と言っています -もちろんです!これは私のうんざりなので、ここで少し怒らせます。 このサイトのセキュリティ関連のすべての質問の99%(大丈夫なので、少し誇張しているかもしれません)が「完全に安全なプログラムを作成する方法はありません」という急流で回答されているのはなぜですか?これは役に立ちません回答!セキュリティは、一方の端で完全なユーザビリティとセキュリティなしの間の、もう一方の端で完全なセキュリティだがユーザビリティなしの間のスライディングスケールです。 重要なのは、何をしようとしているのか、ソフトウェアが実行される環境に応じて、スライディングスケールでの位置を選択することです。軍事施設用のアプリではなく、自宅のPC用のアプリを作成しています。信頼されていないネットワーク全体で、既知の暗号化キーを使用してデータを暗号化する必要があります。これらの場合、「あいまいさによるセキュリティ」でおそらく十分です。確かに、十分な時間、エネルギー、スキルを備えた誰かがバイナリをリバースエンジニアリングしてパスワードを見つけることができますが、どうでしょうか。私は気にしません: 一流の安全なシステムを実装するのにかかる時間は、クラックされたバージョンによる販売の損失よりも高価です(私が実際にこれを販売しているわけではありませんが、あなたの言うとおりです)。新しいプログラマーの間でのプログラミングにおけるこの青空の「可能な限り絶対的な最善の方法」の傾向は、控えめに言っても馬鹿げています。 この質問に答えてくれてありがとう-彼らは最も役に立ちました。残念ながら、私は1つの回答しか受け入れることができませんが、役立つ回答はすべて賛成票を投じました。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.