static поле
От: Pavel Dvorkin Россия  
Дата: 09.09.08 09:31
Оценка:
Забавный вопрос возник.

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

На С++ сделать его static и все.

А на С как ? Есть идеи ?

Вопрос, конечно, чисто академический.
With best regards
Pavel Dvorkin
Re: static поле
От: remark Россия http://www.1024cores.net/
Дата: 09.09.08 09:34
Оценка: +3
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Пишу на чистом C. Есть некая структура, в ней поля, и вот хотелось бы , чтобы одно поле было общим для всех экземпляров.

PD>На С++ сделать его static и все.
PD>А на С как ? Есть идеи ?
PD>Вопрос, конечно, чисто академический.

Глобальная переменная?

1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: static поле
От: Bell Россия  
Дата: 09.09.08 09:51
Оценка: 12 (2)
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Забавный вопрос возник.


PD>Пишу на чистом C. Есть некая структура, в ней поля, и вот хотелось бы , чтобы одно поле было общим для всех экземпляров.


PD>На С++ сделать его static и все.


PD>А на С как ? Есть идеи ?


PD>Вопрос, конечно, чисто академический.



typedef struct test_tag 
{
   int i;
} test;

int* static_test_field(test* t)
{
   static int static_field = 0;
   return &static_field;
}

void f()
{
   test t;
   int i = *static_test_field(&t);
   *static_test_field(&t) = 5;
}


Ответ чисто академический
Любите книгу — источник знаний (с) М.Горький
Re[2]: static поле
От: Mazay Россия  
Дата: 10.09.08 03:49
Оценка: :)
Здравствуйте, Bell, Вы писали:

B>
B>typedef struct test_tag 
B>{
B>   int i;
B>} test;

B>int* static_test_field(test* t)
B>{
B>   static int static_field = 0;
B>   return &static_field;
B>}

B>void f()
B>{
B>   test t;
B>   int i = *static_test_field(&t);
B>   *static_test_field(&t) = 5;
B>}
B>


Хотел спросить зачем struct test_tag и параметр в static_test_field, но потом дошло, что для того что бы привязать static_test_field к типу данных test. Тогда почему нельзя вот так:

int& static_test_field(test* t = 0)
{
   static int static_field = 0;
   return static_field;
}

void f()
{
   int i = static_test_field();
   static_test_field() = 5;
}

?
Главное гармония ...
Re[2]: static поле
От: Pavel Dvorkin Россия  
Дата: 10.09.08 03:50
Оценка: :)
Здравствуйте, remark, Вы писали:


R>Глобальная переменная?


Ну неужто я бы сам не догадался до этого решения ?
With best regards
Pavel Dvorkin
Re[3]: static поле
От: Bell Россия  
Дата: 10.09.08 03:55
Оценка: 4 (1)
Здравствуйте, Mazay, Вы писали:

M>Хотел спросить зачем struct test_tag и

чтобы потом можно было писать test t а не struct test t.

M>...параметр в static_test_field, но потом дошло, что для того что бы привязать static_test_field к типу данных test.

Верно.

M>Тогда почему нельзя вот так:

M>
M>int& static_test_field(test* t = 0)
M>{
M>   static int static_field = 0;
M>   return static_field;
M>}

M>void f()
M>{
M>   int i = static_test_field();
M>   static_test_field() = 5;
M>}
M>

M>?

Потому что ссылки — изобретение С++, а речь в данном случае идет о С.
Любите книгу — источник знаний (с) М.Горький
Re[2]: static поле
От: Pavel Dvorkin Россия  
Дата: 10.09.08 12:15
Оценка:
Здравствуйте, Bell, Вы писали:


B>Ответ чисто академический


Чисто академически оценил. Но за употребление таких фокусов в рабочем проекте меня будут бить канделябрами
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.