関数を使用できる多くの簡単なタスクでf(x,y)
は、プレーンCではマクロが使用されます。関数呼び出し(つまり、任意のコードのコード拡張ではなく、関数のインライン化に使用されるマクロ)で解決できるこれらのケースについて具体的に尋ねたいと思います。
他のCファイルからリンクされている可能性があるため、通常、C関数はインライン化されません。ただし、静的C関数は、それらが定義されているCファイル内からのみ表示されます。したがって、コンパイラーによってインライン化できます。多くのマクロは、より安全なコードを生成するため、静的関数に変換することで置き換える必要があると聞きました。
これが良くないケースはありますか?
繰り返しますが、##と同様に、関数としてまったく表現できない構造を持つコード生成マクロについては尋ねません。
4
ここでstackoverflow.com/questions/9104568/macro-vs-function-in-cとここでstackoverflow.com/questions/1358232/why-use-macros-in-c
—
Maru
適切なマクロを書くのは
—
ラチェットフリーク
inline
面倒です。関数をingするだけで、バイナリで複数回定義できるようになり、コンパイラーは実際にインライン化してスペースを節約するかどうかを決定できます
私は実際にこれらのほとんどが歴史的な理由だと思います。昔、Cコンパイラは関数をインライン化していませんでした。そのため、インライン化したいものにマクロを使用していました。Cコードは通常、長寿命です。
—
Jan Hudec 2013年
@ratchetfreak:Cにははありません
—
wirrbel 2013年
inline
。これはC ++に関するものではありません。
@wirrbelもちろん
—
2013年
inline
、少なくともC99以降はCにもあります。概要については、インライン関数に関するウィキペディアを参照してください。