C code (return struct)
От: George__20  
Дата: 15.06.07 10:35
Оценка: :)
Kto mojet pomoch raziasnite etot cod. Neponiatni tolko eti skobki ZARANE SPOSIBO

typedef struct {
int a;
} st;

st f()
{
int a;
return (st) {({a;})}; // ???
}

15.06.07 19:33: Перенесено модератором из 'Компьютерные священные войны' — Хитрик Денис
Re: C code (return struct)
От: Lorenzo_LAMAS  
Дата: 15.06.07 15:41
Оценка:
Здравствуйте, George__20, Вы писали:

G__>Kto mojet pomoch raziasnite etot cod. Neponiatni tolko eti skobki ZARANE SPOSIBO


G__>typedef struct {

G__> int a;
G__>} st;

G__>st f()

G__>{
G__> int a;
G__> return (st) {({a;})}; // ???
G__>}

Так как этот код не является ни С++, ни С99, ни С89, не представляестся возможным его объяснить. Уточни, все ли правильно, не напутал ли ты чего.
Может, там такое?
typedef struct
{
   int i_;
}A;

void fun(A a)
{

}

int main()
{
   int a = 0;
   fun((A){a});
   (А){а};
}

тогда, посмотри здесь

http://gcc.gnu.org/onlinedocs/gcc-3.3.1/gcc/Compound-Literals.html
Of course, the code must be complete enough to compile and link.
Re: C code (return struct)
От: Seon  
Дата: 15.06.07 15:41
Оценка:
Здравствуйте, George__20, Вы писали:

G__>Kto mojet pomoch raziasnite etot cod. Neponiatni tolko eti skobki ZARANE SPOSIBO


G__>typedef struct {

G__> int a;
G__>} st;

G__>st f()

G__>{
G__> int a;
G__> return (st) {({a;})}; // ???
G__>}

инициализация возвращаемого значения.

st a[3] = {{1}, {2}, {3}};

только чтото в твоем примере все равно скобок многовато...
Re[2]: C code (return struct)
От: Аноним  
Дата: 21.06.07 06:00
Оценка:
Здравствуйте, Seon, Вы писали:

S>Здравствуйте, George__20, Вы писали:


G__>>Kto mojet pomoch raziasnite etot cod. Neponiatni tolko eti skobki ZARANE SPOSIBO


G__>>typedef struct {

G__>> int a;
G__>>} st;

G__>>st f()

G__>>{
G__>> int a;
G__>> return (st) {({a;})}; // ???
G__>>}

S>инициализация возвращаемого значения.


S>st a[3] = {{1}, {2}, {3}};


S>только чтото в твоем примере все равно скобок многовато...


Ia proboval umenshit' skobki oshibku daiot gcc(C compiler).
Re[2]: C code (return struct)
От: Аноним  
Дата: 21.06.07 06:09
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Здравствуйте, George__20, Вы писали:


G__>>Kto mojet pomoch raziasnite etot cod. Neponiatni tolko eti skobki ZARANE SPOSIBO


G__>>typedef struct {

G__>> int a;
G__>>} st;

G__>>st f()

G__>>{
G__>> int a;
G__>> return (st) {({a;})}; // ???
G__>>}

L_L>Так как этот код не является ни С++, ни С99, ни С89, не представляестся возможным его объяснить. Уточни, все ли правильно, не напутал ли ты чего.

L_L>Может, там такое?
L_L>
L_L>typedef struct
L_L>{
L_L>   int i_;
L_L>}A;

L_L>void fun(A a)
L_L>{

L_L>}

L_L>int main()
L_L>{
L_L>   int a = 0;
L_L>   fun((A){a});
L_L>   (А){а};
L_L>}
L_L>

L_L>тогда, посмотри здесь

L_L>http://gcc.gnu.org/onlinedocs/gcc-3.3.1/gcc/Compound-Literals.html


Etot code normalno kampiliruetca na cc-3.4 a tvoi napisani code sovsem drugoe. Nado napisat' function katori vozvrashaet struct a ne poluchaet. mojno bilo napisat' tak :

typedef struct {
         int a;
} st;

st f()
{
    int a;
    st s;
    s.a = a;
    return s;
}
Re: C code (return struct)
От: dmikh  
Дата: 22.06.07 16:49
Оценка:
Здравствуйте, George__20, Вы писали:

G__>Kto mojet pomoch raziasnite etot cod. Neponiatni tolko eti skobki ZARANE SPOSIBO


G__>typedef struct {

G__> int a;
G__>} st;

G__>st f()

G__>{
G__> int a;
G__> return (st) {({a;})}; // ???
G__>}




(st) {...}

это compound literal из C99 стандарта. Фактически компилятор здесь делает неименнованную переменную типа st и инициализирует ее тем что в скобках.

({ ...; })

это уже расширение из GNU C. GNU C которое позволяет из блока кода сделать выражение значение и тип которого определяется последним statement в блоке.

В данном примере
return (st) {({a;})};

эквивалентно просто
return a;

ну и такие навороты особого смысла не имеют, если только это не вопрос на интервью.
Re[2]: C code (return struct)
От: Аноним  
Дата: 26.06.07 10:44
Оценка:
Здравствуйте, dmikh, Вы писали:

D>Здравствуйте, George__20, Вы писали:


G__>>Kto mojet pomoch raziasnite etot cod. Neponiatni tolko eti skobki ZARANE SPOSIBO


G__>>typedef struct {

G__>> int a;
G__>>} st;

G__>>st f()

G__>>{
G__>> int a;
G__>> return (st) {({a;})}; // ???
G__>>}




D>
D>(st) {...} 
D>

D> это compound literal из C99 стандарта. Фактически компилятор здесь делает неименнованную переменную типа st и инициализирует ее тем что в скобках.

D>
D>({ ...; })
D>

D> это уже расширение из GNU C. GNU C которое позволяет из блока кода сделать выражение значение и тип которого определяется последним statement в блоке.

D>В данном примере

D>
D>return (st) {({a;})};
D>

D> эквивалентно просто
D>
D>return a;
D>

D> ну и такие навороты особого смысла не имеют, если только это не вопрос на интервью.


Sposibo bolshoe! eto ne vopros na intervu tam v primere bili statement-i no ia uprastil.
Re[2]: C code (return struct)
От: dmikh  
Дата: 26.06.07 11:43
Оценка:
небольшая коррекция:

D>В данном примере

D>
D>return (st) {({a;})};
D>

D> эквивалентно просто

st s = { a };
return s;
Re[2]: C code (return struct)
От: Roman Odaisky Украина  
Дата: 27.06.07 08:35
Оценка:
Здравствуйте, dmikh, Вы писали:

D>В данном примере

D>
D>return (st) {({a;})};
D>

D> эквивалентно просто
D>
D>return a;
D>


Не-не, оно эквивалентно
return (st){a};
До последнего не верил в пирамиду Лебедева.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.