eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingInicjalizacja/przypisanie wartości dla struktur w CRe: Inicjalizacja/przypisanie wartości dla struktur w C
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: " " <f...@W...gazeta.pl>
    Newsgroups: pl.comp.programming
    Subject: Re: Inicjalizacja/przypisanie wartości dla struktur w C
    Date: Wed, 21 Dec 2011 13:52:54 +0000 (UTC)
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 67
    Message-ID: <jcsobm$oog$1@inews.gazeta.pl>
    References: <jcsfeo$20k5$1@news2.ipartners.pl>
    NNTP-Posting-Host: localhost
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1324475574 25360 172.20.26.238 (21 Dec 2011 13:52:54 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Wed, 21 Dec 2011 13:52:54 +0000 (UTC)
    X-User: fir
    X-Forwarded-For: 31.61.130.243
    X-Remote-IP: localhost
    Xref: news-archive.icm.edu.pl pl.comp.programming:194402
    [ ukryj nagłówki ]

    JDX <j...@o...pl> napisał(a):

    > 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().

    o ile ja pamietam jako cos czytalem to nie od samego
    poczatku ale zrobiono to wczesnie gdzies tak w poczatku
    lat 80tych (nie jest to precyzyjne info, tylko mowie ze tak
    cos zapamiatalem, o ile to sa wogole dobre informacje)

    kiedys ostatnio pytalem na grupi pl.comp.lang.c o podobna
    kwestie tj mozliwosc przypisywania (w runtime) wyrazeniami
    typu s = {90,80,70}; to o ile pamietam ktos odpowiedzial ze
    to wrzucono w 89 czy 99 (tez nie pamiatam dokladnie ani daty
    ani w sumie faktu)



    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: