2011-03-19 2 views
7

Почему пустая структура в C является нарушением ограничения? Почему это правило изменяется на C++?Пустая структура в C vs пустая структура в C++

Есть ли исторические причины?

+0

http://stackoverflow.com/questions/755305/empty-structure-in-c –

+0

Возможный дубликат [Каков размер пустой структуры в C?] (Http://stackoverflow.com/questions/ 1626446/what-is-size-of-the-empty-struct-in-c) – Nawaz

+2

@Nawaz: Это другой вопрос. Фактический вопрос - «почему», а не «что». –

ответ

8

Поскольку у вас нет наследования в C, они вам не нужны. Если вы просто хотите иметь различаемый тип указателя, вы можете использовать указатели для неполных типов.

struct opaque; 

struct opaque* stranger = 0; 

должен работать нормально.

+0

+1 от меня: ты выиграл мой аргумент с @Nawaz :) –

+0

+1 за то, что напомнил мне об этом! – Nawaz

+0

Я понял, что вы специалист по макроэкономике.Не могли бы вы посмотреть http://stackoverflow.com/questions/5355241/generating-function-declaration-using-a-macro-iteration, есть ли какие-либо улучшения? Благодаря! –

3

Мое предположение заключается в следующем:

В C, не существует наследование, шаблоны, и перегрузка функций - три основные причины, которые мы используем пустые Структуры в С ++ - в качестве базового интерфейса, в качестве параметра шаблона, как чтобы помочь перегрузить разрешение.

Можете ли вы придумать какое-либо реальное использование пустой структуры в C?

+0

Пустые структуры могут использоваться ручкой, нет? [Сравнение ручек: пустые классы против неопределенных классов void void *] (http://stackoverflow.com/questions/4525847/handles-comparison-empty-classes-vs-undefined-classes-vs-void) – Nawaz

+0

@Nawaz: Возможно, возможно, я специально упомянул, что это было просто предположение :) –

+0

@Armen: Это означает, что ваша догадка кажется неправильной. Пустые структуры в C можно использовать во многих случаях, особенно там, где используется 'void *'! – Nawaz

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