そこここに「何を」に関連する質問です:C11の根拠はまだ公開されていない、これは不必要に複雑と思われるので、C11 grammar ambiguity between _Atomic type specifier and qualifierC11 _Atomic specifier-vs-qualifier構文の不規則性の根拠?
私が興味を持って何が、なぜです。
文法は、これらの両方を含む(およびINGのshift
を支持して曖昧さを解決する(
declarator
又はabstract-declarator
)、続いてそれ以外の場合、ルックアヘッドであろうよりもむしろreduce
()declaration-specifiers
又はspecifier-qualifier-list
から到達可能な、:
int i1;
int (i2); // valid, same as i1 - usually seen in the context of pointer-to-function or pointer-to-array
int _Atomic a1;
int _Atomic (a2); // invalid
_Atomic (int) a3; // valid, same as a1
思考:
atomic-type-specifier: _Atomic (type-name)
type-qualifier: _Atomic
これは、次のコードにつながる
_Atomic
は、配列や関数を変更しないでください。宣言子の周りに冗長なかっこを付けないと、#define _Atomic(x) x _Atomic
(これはもちろん#define
キーワードには合法であった場合)に有効です。それはqualifier
として生じる場合は、
_Atomic
はconst
と同じ構文部分であり、Cプログラマは正しい側const
を置くために使用既にであるので、「使いやすさ」のことはできません。
「const int * x、* const y; '==' const int * x; const int * const y; '。アトミックポインタ型を修飾する 'const'型修飾子を使って行える' _Atomic'型修飾子でも同じことができます。これは、私が知っている限り、 '_Atomic'型修飾子が存在する唯一のもっともらしい理由です。そうでなければ、無意味なことです。 –
さて、私たちは、*キャストmalloc *のゴミのいくつかが[** N1485 pp.4 **](http://www.open-std.org/jtc1/sc22/wg14/ www/docs/n1485.pdf) –