-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!nf1.ipartners.pl!ipartners.pl!news2.ipa
rtners.pl!not-for-mail
From: JDX <j...@o...pl>
Newsgroups: pl.comp.programming
Subject: Inicjalizacja/przypisanie wartości dla struktur w C
Date: Wed, 21 Dec 2011 12:20:41 +0100
Organization: N/A
Lines: 49
Message-ID: <jcsfeo$20k5$1@news2.ipartners.pl>
NNTP-Posting-Host: ip-157-25-65-73.multimo.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-2
Content-Transfer-Encoding: 8bit
X-Trace: news2.ipartners.pl 1324466456 66181 157.25.65.73 (21 Dec 2011 11:20:56 GMT)
X-Complaints-To: a...@i...pl
NNTP-Posting-Date: 21 Dec 2011 11:20:56 GMT
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20111105 Thunderbird/8.0
X-Enigmail-Version: 1.3.4
Xref: news-archive.icm.edu.pl pl.comp.programming:194396
[ ukryj nagłówki ]Witam,
jest sobie następujący kawałek kodu w C:
typedef struct {
[... dużo pól typu int ...]
} MyType;
void aFunc(MyType *aPar)
{
MyType aLocalVar = *aPar;
[... coś tam coś tam ...]
}
Spojrzałem sobie na standard C99
(http://www.open-std.org/JTC1/SC22/WG14/www/docs/n12
56.pdf) i taka
inicjalizacja struktur/unii, czy też ogólniej, przypisanie im wartości
jest możliwa (rozdziały 6.7.8 i 6.5.16.1). Interesuje mnie coś takiego
było możliwe w C "od zawsze".
A pytam, ponieważ wczoraj natknąłem się na ciekawy problem. Otóż gdy
próbuję skompilować kawałek (nie mojego) kodu z opcją -g (debug stuff
on) za pomocą cokolwiek archaicznego gcc 3.4.1 dla MIPS32 linker skarży
mi się na brak memcpy() w miejscach gdzie zmienne typu struct{...} są
inicjalizowane w w/w sposób. Platforma docelowa jest "embedded" więc nie
ma dostępnej standardowej "standardowej biblioteki C". Oczywiście mam
swoją własną bibliotekę gdzie m.in. jest zdefiniowana funkcja
lib_memcpy() oraz makro definiujące memcpy() jako lib_memcpy() i
wszystko jest OK jeśli gdzieś tam w kodzie memcpy()jest wołane jawnie.
Natomiast gdy kompiluję kod z -g0 -O3 (debug stuff off, optimized) to
kompilacja przebiega bez problemów. Wgląda na to, że gcc używa memcpy()
jako "konstruktora kopiującego" z tym że w pierwszym przypadku używa (a
przynajmniej próbuje) funkcji ze standardowej biblioteki C a w drugim
funkcji wbudowanej w kompilator.
Oczywiście gdy podmienię inicjalizację na coś takiego:
MyType aLocalVar;
memcpy(&aLocalVar, aPar, sizeof(MyType));
to wszystko jest OK w obu przypadkach.
Tak więc ponawiam pytanie - czy tego typu inicjalizacja zawsze była
możliwa w C? Bo mam przeczucie że nie zawsze. A z drugiej strony ten
problem to dla mnie nowość ponieważ we własnym kodzie zawsze
inicjalizowałem typy złożone albo przez przypisanie wartości
poszczególnym polom albo właśnie przez jawne wywołanie memcpy().
Następne wpisy z tego wątku
Najnowsze wątki z tej grupy
- Alg. kompresji LZW
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
Najnowsze wątki
- 2025-02-17 Kraków => MS Dynamics 365BC/NAV Developer <=
- 2025-02-17 Chrzanów => Programista NodeJS <=
- 2025-02-17 Warszawa => Node.js / Fullstack Developer <=
- 2025-02-17 Białystok => System Architect (Java background) <=
- 2025-02-17 Białystok => Solution Architect (Java background) <=
- 2025-02-17 Gliwice => Team Lead / Tribe Lead FrontEnd <=
- 2025-02-17 Gdańsk => PHP Developer <=
- 2025-02-17 Warszawa => Senior ASP.NET Developer <=
- 2025-02-17 Gliwice => Business Development Manager - Network and Network Security
- 2025-02-17 Mińsk Mazowiecki => Area Sales Manager OZE <=
- 2025-02-17 Odśnieżanie samochodu
- 2025-02-17 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2025-02-17 Dęblin => JavaScript / Node / Fullstack Developer <=
- 2025-02-17 Pompiarze...
- 2025-02-16 PV teraz