私は、特定のクラスの関数の関数プロトタイプを含まないCコードを扱っています。関数プロトタイプを使用しないことに利点はありますか?関数は互いに呼び出すことはなく、パラメータもありません。コードが大きく変わるので、編集する行が1つ少なくなるかもしれません。Cで関数プロトタイプを使用しないと何か利点はありますか?
答えて
関数プロトタイプは外部関数用です。私の規則は、すべての非静的関数はmain()以外のプロトタイプを取得するということです。私は '-Wmissing-prototypes' GCCオプションを使用します。通常、関数が静的であることを宣言するのを忘れると、それがキャッチします。また
、Cでこのような機能を宣言:第二の方法は、関数は「にISNパラメータの不特定多数を取ることを意味するので
void function();
:
void function(void);
としないこのようにあなたが望むもの(ANSI C以前との互換性のためです)。
"だから、編集する行が1つ少なくなっているのでしょうか?"
これは、この場合の唯一の可能な「メリット」です。単純な怠惰です。
変更するコードが少ないことは、私が考えることができる唯一の「利点」です。通常、これはちょうど「怠惰な」ものです
いずれにしても、欠点はより重要です。すべての機能を1つのソースファイルにまとめる必要があります。ソースファイルの関数の順序が重要になります。また、他の人はヘッダーファイルを見たり/探したりして混乱します。ベストプラクティスは.cと.hです。
いいえ。
厳密には正当なものであるかどうかわかりません。
プロトタイプを使用しないことは合法です。宣言されていない関数を使用することは正当ではありません。すべてのプロトタイプは宣言ですが、いくつかの宣言はプロトタイプではありません。バリデーショナル関数の場合にのみプロトタイプは絶対的に必須です。 –
コードが大きく変更されるため、 編集する行が1つ少なくなります。
私はそれが理由だと思います。それ以外の理由は考えられません。コンパイル速度の変更(実際上)も実行時間も、コードを更新するための時間だけではありません。
関数プロトタイプに適用すると "コードが大きく変更されます"もコードの匂いが悪いです。インタフェース(関数の署名)が大きく変わると、関数の責任はあまり明確ではありません。最初に、問題をサブレスポンスに分割する方法を理解し、その後にコードを書くことを開始します。
私が考えることができる唯一の利点は、関数の最初の行を.cまたは.hファイルのプロトタイプセクションにコピーアンドペーストする必要がなくなることです。
他のファイルで参照される関数については、プロトタイプを持つ以外に選択肢はありません。
ファイルスコープを持つ関数(静的関数)の場合、ブロック内のすべてのプロトタイプをファイルの先頭に置くと便利です。そうすれば、静的関数はそのファイル内のどこからでも呼び出すことができます。プロトタイプなしでは、関数A()はB()がコード内で宣言されている場合にのみ関数B()を呼び出すことができます。
また、一部のコンパイラは、プロトタイプがスコープ内にない場合、パラメータに関する安全でない仮定を行います。
さらに、MISRA-Cに準拠したコードを書く場合、すべて関数のプロトタイプがスコープに含まれている必要があります。
プロトタイプだけを見てパラメータの目的を明確にしているので、プロトタイプにパラメータ名が含まれていることを保証することも薦めたいと思います。
これはタイピングが少ないので、RSIのリスクを軽減する可能性があります。
- 1. Objective-Cでブロックを関数に使用する利点はありますか?
- 2. Python 3を使用する利点/利点は何ですか?
- 3. C#でインターフェイスを使用する利点は何ですか?
- 4. Joomla - ラッパー|何か不利な点はありますか?
- 5. Androidサポートライブラリの使用に不利な点はありますか?
- 6. SecureStringはMSILの逆コンパイルに関して何か利点がありますか?
- 7. オブジェクトを関数型プログラミング言語で使用する利点は何ですか?
- 8. C#ではなくSitecoreでXSLを使用する利点は何ですか?
- 9. 異なるパラメータでその関数を使用するとき、関数プロトタイプには何を入れますか?
- 10. このリファクタリングには何か利点はありますか?
- 11. userscriptでは、querySelector()とjQueryの$()を使用する利点はありますか?
- 12. C#MVC:Modelbindersを使用することの本当の利点は何ですか?
- 13. Pythonの関数で関数を定義する利点は何ですか?
- 14. PHPでオブジェクトを使用するとパフォーマンス上の利点はありますか?
- 15. アプリケーションデータベースを使用パターンで分けることに利点はありますか?
- 16. プロトタイプ関数とjavascriptの通常の関数との違いは何ですか?
- 17. 静的関数の利点は何ですか?
- 18. フレームを再描画しないとパフォーマンス上の利点はありますか?
- 19. C++で&(アドレス)演算子を使用する代わりに、std :: addressof()関数テンプレートを使用する利点はありますか?
- 20. Cでプロトタイプなしで関数を呼び出すためのドキュメントはありますか?
- 21. 使用して、インターフェイスの利点は何ですか
- 22. SQLクエリでエイリアスを使用しないと欠点はありますか?
- 23. メソッドシグネチャでジェネリックを使用する利点は何ですか?
- 24. サプライヤをJavaで使用する利点は何ですか?
- 25. pgbouncerでトランザクションプーリングを使用する利点は何ですか?
- 26. TextBox上でRichTextBoxを使用する利点は何ですか?
- 27. WebアプリケーションでEJBを使用する利点は何ですか?
- 28. TomcatでAPRを使用する利点(ある場合)は何ですか?
- 29. PyQtのネイティブC++ Qtを使用する利点は何ですか
- 30. 関数プロトタイプの後に - >は何を意味しますか?
私はまた、.cファイルの先頭に静的ファンクションのプロトタイプを使用します。あなたが実装されている順序について心配する必要はありません。 – gnud
私は静的関数のプロトタイプを使用していましたが、その後ほとんどの時間には納得できませんでした。プロトタイプがあれば、2つの場所で情報を繰り返すことになります。インターフェイスの場合、それは必要ですが、なぜ静的関数でそれを行うのですか? –
@Chris:いくつかのコンパイラは、プロトタイプがスコープにない場合、パラメータに関する安全でない仮定をするでしょう。 –