2012-02-20 2 views
8

Я хотел бы знать разницу между квалификатором и модификатором. Некоторые книги показывают, что volatile является модификатором, другие книги рассматривают его как квалификатор.В чем разница между квалификатором и модификатором в C?

Так что же такое модификатор и определитель в отношении переменной?

+0

Бонусный вопрос: где здесь находится спецификатор объявления? – Kos

+1

@Kos: «спецификатор декларации» является более общей категорией. В C грамматике C не существует особой «спецификации-спецификатора», но «спецификаторы-объявления» - это список спецификаторов класса хранения ('typedef',' static', 'extern',' auto', 'register'), классификаторы типов ('const',' restrict', 'volatile'), спецификаторы функций (' inline') и имена типов, которые (неофициально) говорят, что на самом деле определено. –

+0

Спросите автора книги, они составили термин «модификатор» из синего. Такого термина нет. – Lundin

ответ

6

В терминологии С volatile является классификатором .

const, restrict, volatile и C11 _Atomic являются классификаторами типа C.

C терминология не использует слово модификатор при объявлении объекта.

+0

Что вы берете на классы хранения, они также попадают под квалификатор? –

+0

'static' и' extern' являются спецификаторами класса хранения, а не квалификаторами. Одно отличие состоит в том, что они используются только в определениях, тогда как квалификаторы могут использоваться в объявлениях. – ugoren

+0

@ugoren: в этом синтаксисе нет такого различия. Просто различные части стандартного состояния, что почти любое объявление объекта с помощью спецификатора класса хранения является определением, одним или другим (поскольку оно автоматическое или потому, что оно является предварительным определением или потому, что это внешнее определение или, возможно, другие определения, о которых я не думал). –