2015-03-04 3 views
0

Я заметил некоторый код в Linux ядро ​​со следующим:Два определения перечислений из той же переменной

В файле s3c-dma-pl330.h есть определение:

enum dma_ch { 
... 
}; 

и в конце, что файл есть: #include <plat/dma.h> В этом файле (dma.h) есть: enum dma_ch; No extern написано, вы можете сказать, что на самом деле происходит?

Есть ли dma_ch в dma.h то же самое, что и в s3c-dma-pl330.h? Почему нет спецификатора extern?

ответ

4

enum dma_ch; - это передовая декларация перечисления.

Мы используем extern, когда хотим обратиться к экземпляру объекта, который находится в (возможно) некоторой другой единицы перевода. dma_ch не является объектом, это тип.

+0

Здесь упоминается http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=450, что форвардное объявление для типа перечисления должно содержать его базу. Имеет ли это? – Bush

+0

Это относится к C++, а не к. И этот код разрешен, потому что Linux скомпилирован с помощью C плюс некоторые расширения gnu, например, разрешая переадресацию объявления переименования. –

Смежные вопросы