2016-08-24 2 views
1

は、私は理解していないこれらの#define sが見つかり:#define ROBJECT_EMBED_LEN_MAX ROBJECT_EMBED_LEN_MAXの機能は何ですか? MRIのコードをブラウズ

#define ROBJECT_EMBED_LEN_MAX ROBJECT_EMBED_LEN_MAX 
#define ROBJECT_EMBED ROBJECT_EMBED 
enum { 
    ROBJECT_EMBED_LEN_MAX = 3, 
    ROBJECT_EMBED = RUBY_FL_USER1, 

    ROBJECT_ENUM_END 
}; 

をそれら#define Sのポイントは何ですか?彼らは何もしないようです...

このコードはruby github repoのruby/include/ruby/ruby.hファイルにあります。

+0

@ AlexanderO'Maraいいえ、そうではありません。この定義は列挙型を参照しているようです。 – csTroubled

+0

これは複数行のマクロではありません:http://stackoverflow.com/questions/16685211/c-define-multiline-macro –

+1

複製:http://stackoverflow.com/q/6830602 – rici

答えて

0

#defineは、#ifdefを使用してコンパイル時に定義の有無をテストすることができます。 (コンパイル時にenumの存在をテストすることはできません)

Cプリプロセッサは再帰的置換を行いませんので、シンボル自体を効果的に定義することはありません。シンボルはそれ自身と一度置き換えられ、通常はコンパイラに渡されます。

関連する問題