-1

Cが選択的な設定を許可するかどうか疑問に思っていました#define。選択的とは次のことを意味します。構造が定義されている場合:

typedef struct mystruct{  
int (*pointer_function)(struct mystruct* ,struct mystruct);
...
} mystruct;

// and I have:
int main () {
mystruct s1, s2;
// when I do:
s1 = s2;
// I want my #define to recognize that on the left side
// I have mystruct type and use s1.pointer_function(&s1,s2);
}
4

3 に答える 3

0

_Genericこれは、構文を使用して C11 で実行できます。

#define MY_MACRO(x, y) _Generic((x), \
    mystruct: (x).pointer_function(&(x), (y)), \
    )

これは C99 または C89 では実行できません。まともな C11 をサポートするコンパイラをまだ知らないので、このコードはまだ 1 年か 2 年はコンパイルされません。GCC ドキュメントから ( source ):

GCC は、-std=c11 または -std=iso9899:2011 で有効化された、この標準の部分に対する不完全なサポートを制限しています。

于 2012-05-04T22:05:18.047 に答える
0

#define は単純な文字列置換を実行します。文脈依存ではありません。これはできません。

于 2012-05-04T21:56:20.653 に答える
0

どのシンボルを定義するのか、s1またはs2. どちらの場合でも、必要な名前の1つを置き換えるので、機能しません。

于 2012-05-04T21:58:11.850 に答える