0

これは、「Cのインライン関数が内部データ構造を公開する」ということをよく耳にします。これが、一部の人々がそれらを好まない理由の1つです。

誰か説明してもらえますか?

前もって感謝します。

プログラムcode.cと関数func()があるとしましょう。1)func()をインラインにすることができます-これにより、code.cのデータ構造で行うことはすべて公開されます2)func()をライブラリに入れて、共有ライブラリとして提供できます(読み取り可能ではありません-I推測??:p)----これは正しい分析ですか?

4

3 に答える 3

2

インライン関数定義をヘッダーファイル(単一のcppファイルで使用されている場合を除く)に配置するため、コンシューマーがインクルードする必要があるため、コードの内部動作を公開していると思います。

しかし、代替手段は通常マクロであるため、それがマクロに対する正当な理由であるとは思えません。

于 2011-06-23T20:58:39.270 に答える
1

ライブラリまたはオブジェクトモジュールにコンパイルされたものと比較して、確かに透過的です。これは、ソースコードを確認できるため、データ構造を任意の方法で操作するコードを記述できるためです。

ただし、ソースがある非ライン関数の場合、それをより保護する方法がわかりません。

ソフトウェアのソースコードを嫉妬深く守り、リンクするオブジェクトモジュール、共有ライブラリ、または(恐ろしい!).DLLのみをリリースするソフトウェア企業があります。

于 2011-06-23T20:56:46.303 に答える
1

インラインメソッドは、すべてのメソッド呼び出しを適切に展開します。したがって、foo()をJMPまたはCALL命令にする代わりに、呼び出されたfoo()の実際の命令をコピーするだけです。これに重要なデータが含まれている場合、インライン関数は通常、短い1〜2行のメソッドまたはより大きな式に使用されますが、それが公開されます。

于 2011-06-23T21:00:03.443 に答える