реклама на сайте
подробности

 
 
> Си: 2 константы-структуры с полями-указателями друг на друга, как объяснить компилятору?
_Ivana
сообщение Feb 29 2012, 23:22
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Собственно, сабжевая задача. Обходные варианты есть, но хочется красиво sm.gif
Структура. Одно из полей - указатель на структуру этого же типа.
2 переменные. Одна содержит в этом поле указатель на вторую, вторая - на первую. Если не константы - то все работает, ибо мы присваиваем значение полям когда угодно.
Если константы - не работает, ибо надо при определении заполнить её значениями, а вторая переменная получается ещё не определена и не получается на неё указать sm.gif

ЗЫ сейчас пробую разнести на 2 файла и поиграться экстернами, но пока не получается sm.gif

Вроде удалось добиться понимания от компилятора в результате следующих искусственных манипуляций:

делается хедэр с определением типа
Код
typedef struct our
{
    unsigned char c;
    struct our *s_our;
} our_struct;


делается 2 файла, в которые инклюдится этот хедэр и пишется в одном
Код
extern our_struct s1;
const our_struct s2 = {'A', &s1};


и в другом
Код
extern our_struct s2;
const our_struct s1 = {'A', &s2};


Билд проекта собирается. ошибок не выдает. Теперь попозже проверю как это работает в реале sm.gif

Сообщение отредактировал _Ivana - Feb 29 2012, 23:23
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Marto
сообщение Mar 1 2012, 09:01
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 103
Регистрация: 17-05-09
Из: Ижевск
Пользователь №: 49 190



Сами пробовали компилить?


--------------------
Шизоидный холерик
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 1 2012, 09:19
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Marto @ Mar 1 2012, 11:01) *
Сами пробовали компилить?
Да.
CODE
D:\Projects\test\uuu>make
avr-gcc --version
avr-gcc.exe (WinAVR 20100110) 4.3.3
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

cat test.c
typedef struct our
{
    unsigned char c;
    struct our const *s_our;
} our_struct;

extern our_struct const s1;
const our_struct s2 = {'A', &s1};
const our_struct s1 = {'A', &s2};

int main()
{
    for(;;)
       ;
}
Compiling: test.c
avr-gcc  -mmcu=atmega8 -Wall -gdwarf-2  -DF_CPU=14745000UL  -Os  -fsigned-char -funsigned-bitfields -fshort-enums -MD -MP -MT ./release/obj/test.o -MF ./release/dep/test.o.d  -ffunction-sections  -fdata-sections -fno-ivopts --param inline-call-cost=0 -fno-move-loop-invariants -Wa,-ahlmsd=./release/lst/test.lst -c  test.c -o release/obj/test.o
Linking: release/struct_test.elf
avr-gcc -mmcu=atmega8 -Wl,-Map=./release/lst/struct_test.map -Wl,--gc-sections -Wl,--relax  ./release/obj/test.o    -o release/struct_test.elf
Generating hex: release/struct_test.hex
avr-objcopy -O ihex -R .eeprom  release/struct_test.elf release/struct_test.hex
Generating eep: release/struct_test.ee.hex
avr-objcopy -O ihex -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings release/struct_test.elf release/struct_test.ee.hex || exit 0
Generating disassembly: release/lst/struct_test.lss
avr-objdump -h -S release/struct_test.elf > release/lst/struct_test.lss
AVR Memory Usage
----------------
Device: atmega8

Program:      84 bytes (1.0% Full)
(.text + .data + .bootloader)

Data:          0 bytes (0.0% Full)
(.data + .bss + .noinit)
Еще вопросы?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- _Ivana   Си: 2 константы-структуры с полями-указателями друг на друга   Feb 29 2012, 23:22
- - Marto   А если попробовать сделать члены структуры констан...   Mar 1 2012, 05:54
- - _Ivana   Спасибо за идею, вечером попробую. Только всвязи с...   Mar 1 2012, 06:46
|- - Marto   Цитата(_Ivana @ Mar 1 2012, 11:46) все по...   Mar 1 2012, 07:19
- - Сергей Борщ   QUOTE (_Ivana @ Mar 1 2012, 01:22) делает...   Mar 1 2012, 07:35
- - Marto   Вопросов нет. Нашел ошибку у себя. Спасибо.   Mar 1 2012, 09:55
- - _Ivana   Сергей Борщ блин, посыпАю голову пеплом! Стыдн...   Mar 1 2012, 12:02
- - _Ivana   Казалось бы, все понятно и тема закрыта Это так, ...   Mar 1 2012, 15:38
|- - toweroff   Цитата(_Ivana @ Mar 1 2012, 19:38) Если э...   Mar 1 2012, 16:13
|- - Сергей Борщ   QUOTE (_Ivana @ Mar 1 2012, 17:38) 0.5) в...   Mar 1 2012, 17:57
- - _Ivana   Пока согласно моим заблуждениям, в объявлении это ...   Mar 1 2012, 16:18
|- - toweroff   Цитата(_Ivana @ Mar 1 2012, 20:18) Пока с...   Mar 1 2012, 16:45
- - _Ivana   Мне кажется что объявление - чистая надстройка Си,...   Mar 1 2012, 16:56
- - toweroff   Вопрос. Мы говорим о расширении языка для MC?   Mar 1 2012, 17:03
- - _Ivana   Цитатаupd никогда не заморачивался, но проверил......   Mar 1 2012, 17:05
- - toweroff   Цитата(_Ivana @ Mar 1 2012, 20:56) ЗЫ а я...   Mar 1 2012, 17:07
- - _Ivana   Сергей Борщ очередное спасибо за грамотное и детал...   Mar 1 2012, 18:11


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 13:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01382 секунд с 7
ELECTRONIX ©2004-2016