Забавный вопрос возник.
Пишу на чистом C. Есть некая структура, в ней поля, и вот хотелось бы , чтобы одно поле было общим для всех экземпляров.
На С++ сделать его static и все.
А на С как ?
Есть идеи ?
Вопрос, конечно, чисто академический.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Пишу на чистом C. Есть некая структура, в ней поля, и вот хотелось бы , чтобы одно поле было общим для всех экземпляров.
PD>На С++ сделать его static и все.
PD>А на С как ? Есть идеи ?
PD>Вопрос, конечно, чисто академический.
Глобальная переменная?
Здравствуйте, 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;
}
Ответ чисто академический
Здравствуйте, 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;
}
?
Здравствуйте, remark, Вы писали:
R>Глобальная переменная?
Ну неужто я бы сам не догадался до этого решения ?
Здравствуйте, 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>?
Потому что ссылки — изобретение С++, а речь в данном случае идет о С.
Здравствуйте, Bell, Вы писали:
B>Ответ чисто академический
Чисто академически оценил. Но за употребление таких фокусов в рабочем проекте меня будут бить канделябрами