2014-10-20 14 views
13

Bu standart neden bu farkı yaratıyor? Her ikisi de aynı şekilde, bir atomik tip olarak belirir gibi görünmektedir._Atomic type niteleyici ve type specifier arasında bir fark var mı?

+0

olabilir http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1485.pdf, bu son C11 standardından daha fazla bilgi içeriyor. – nos

+0

http://stackoverflow.com/questions/10668941/c11-grammar-ambiguity-between-atomic-type-specifier-and-qualifier – CinCout

cevap

4

Atom tipi belirticilere: - :)

Syntax:  _Atomic (type-name); 

Böyle bir atom tamsayı bildirebilirsiniz:

 _Atomic(int) counter; 

_Atomic kelime T biçiminde _Atomic(T), kullanılabilir _Atomic T'ye eşdeğer bir tür belirteci olarak bir tür. Böylece, _Atomic(T) x, y;, T bir işaretçi türü olsa bile, x ve y aynı türde olduğunu bildirir. Bu, bir C++ sadece _Atomic(T) makro tanımının atomik olarak önemsiz C++ 0x uyumluluğu sağlar. Uygulama atomik türleri desteklemiyorsa, atomik türdeki belirticiler kullanılmamalıdır. Bir atomik tür belirticideki tür adı, bir dizi türüne, bir işlev türüne, bir atomik türüne veya nitelikli bir türe ait olmamalıdır.

Atomik türlerle ilişkili özellikler yalnızca lvalues ​​olan ifadeler için anlamlıdır.

If the _Atomic keyword is immediately followed by a left parenthesis, it is interpreted as a type specifier (with a type name), not as a type qualifier.

atom tipi kalifiye: - :)

 _Atomic volatile int *p; 
olan atıfta bulunulan tipteki bir amacı, tip sınırlamak nitelikli olmayacaktır işaretçi türleri dışında

It specifies that p has the type ‘‘pointer to volatile atomic int’’, a pointer to a volatile-qualified atomic type.

türleri. _Atomic nitelendiricisi tarafından değiştirilen tür, bir dizi tipi veya işlev tipi olmayacaktır. Kalifiye türlerle ilişkili özellikler yalnızca lvalues ​​olan ifadeler için anlamlıdır. Aynı niteleyici niteleyici listesinde aynı niteleyici listesinde, doğrudan veya bir veya daha fazla yazım hatasıyla birden fazla görüntüleniyorsa, davranış, yalnızca bir kez göründüğü gibi aynıdır. Üste | Diğer niteleyiciler, bir niteleyici niteleyici listesinde _Atomic niteleyici ile birlikte görünürse, sonuç türü, nitelikli atomik türdür.

_Atomic anahtar kelimesi, yalnızca tür niteleyici olarak kullanılır. Bir uygulamacının, döküm operatörü de dahil olmak üzere, uygun dönüşümler yapıldığı sürece, karşılık gelen atomik olmayan tipte aynı temsili ve hizalama ihtiyacını gevşetmesine izin verilir.

3

Evet. Bir fark var. Bu tür belirleyici olarak kullanıldığı zaman, daha sonra standart kısıtlamak (6.7.2.4 s (3)) olarak:

atomik tür belirleyici olarak tür adı bir dizi türü atıfta eder, bir işlev türü , bir atomik tip veya nitelikli bir tür.Örneğin

typedef int arr[5]; 

arr_Atomic eleme gibi kullanılır, fakat _Atomic (gibi _Atomic (arr)) tür belirleyici olarak kullanıldığı takdirde tür adı olarak kullanılamaz bir tür adı

+3

adresinin olası kopyası 6.7.3.3, _Atomic niteleyici için de dizi ve işlev türünde kısıtlamaya sahiptir. – nos

+1

@nos; Evet. 6.7.2.4'de de belirtilmiştir. – haccks

İlgili konular