2016-11-20 7 views
2

CLコンパイラの代替トークン(args ...)は何ですか?CLコンパイラの代替(args ...)トークン

#define DECLARE_C_ARRAY(__type, __name, __page, __args...) \ 
enum { __name##_page_size = __page }; \ 
typedef __type __name##_element_t; \ 
typedef C_ARRAY_SIZE_TYPE __name##_count_t; \ 
typedef struct __name##_t {\ 
    volatile __name##_count_t count;\ 
    volatile __name##_count_t size;\ 
    __name##_element_t * e;\ 
    __args ;\ 
} __name##_t, *__name##_p; 

Example for the GCC compiler

+0

するとは、 "CのMicrosoft Visual C++コンパイラ" を意味するのですか?あなたは何を持っているのですか? –

+0

CLコンパイラとは何ですか? –

+0

はい、私は 'MS Visual C'コンパイラを意味します。 GCCコンパイラの動作例への参照を追加しました。 –

答えて

1

Variadic macros

に見てみましょう可変個引数マクロはC99の新機能です。 GNU CPPは長い間、 をサポートしていましたが、名前付きの可変引数( 'args ...'、 ではなく... 'と' __VA_ARGS__)のみでサポートされています。以前のバージョンのGCCの への移植性に懸念がある場合は、名前付き変数 引数だけを使用してください。一方、 に準拠したC99の実装に移植性が懸念される場合は、 __VA_ARGS__のみを使用してください。

__VA_ARGS__;\ 
#define DECLARE_C_ARRAY(__type, __name, __page, ...) \ 

__args ;\ 

変更

#define DECLARE_C_ARRAY(__type, __name, __page, __args...) \ 

私たちはこの場合、引数

を除外した場合

残念ながら、この方法では、動作しない、セミコロン__VA_ARGS__\を削除する(ただし、パスを引数が使用されている場合)。

例:あなたは "CLコンパイラ" と言うときhttp://rextester.com/GYVS61567

+0

残念ながら、このメソッドは 'args'パラメータを除外しても機能しません。 http://rextester.com/OTMQ48451 –

+1

これが唯一の解決策であれば、VCはコンパイラのGCCよりはるかに劣ると言えるでしょう。ありがとうございました –