2

_Generic私はウィキペディアでこのC11の例を読んでいました:

#define cbrt(X) _Generic((X), long double: cbrtl, \
                          default: cbrt, \
                          float: cbrtf)(X)

パラメーターが 1 つしかない関数に使用する方法は明らかですが、このシステムで 2 つ (またはそれ以上) の汎用パラメーターを持つ関数を作成する方法がわかりません。どうしてそれが可能でしょうか?

コンパイラがこの機能をサポートしていれば、いくつか試してみたでしょうが、見つけることができなかったため、その方法についてのアイデアを見つけることができませんでした。

4

1 に答える 1

4

明らかに、これには「一般的な」ルールはありません。実際にはユースケースに依存します。ただし、一般的な使用例の 1 つは、標準のプロモーションを使用して共通の「スーパータイプ」を決定することです。

#define pow(X, Y) _Generic((X)+(Y), long double: powl, \
                          default: pow,                \
                          float: powf)((X), (Y))

このマクロを呼び出すときに と の型が一致しない場合XY狭い方が自動的に広い方に昇格されます。

于 2013-05-07T12:53:16.163 に答える