Toon posts:

[C99] Wie gebruikt het?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Het valt me op dat ik in de praktijk nog zeer weinig mensen tegenkom die iets met C99 doen.

Wat ik vooral zie is dat mensen of C89/C90 gebruiken omdat ze vast zitten in die taal (meestal de wat oudere programmeurs die binnen niet al te lange tijd met pensioen gaan) of omdat hun platform minimalistisch/spartaans is en alleen C89/C90 support heeft (vaak embedded).

Mischien dat er wel wat mensen zijn die wat van de nieuwe types gebruiken (long long, of de complexe types), maar zijn er bv ook mensen die al in echte code die rare nieuwe syntax gebruiken om structs te initialiseren?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Geen idee welke C ik gebruik als ik aan het C proggen ben to be honest :P Ik ben van huis uit C++'er... maar welke exotische struct-init-syntax bedoel je?

Professionele website nodig?


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Ik denk dat mensen dan eerder C++ gebruiken. Een platform dat C99 ondersteunt heeft ook meestal wel C++. Persoonlijk heb ik er wel eens van gehoord, en wat van de nieuwe syntax gezien, maar het nog nooit gebruikt. Als ik C moet schrijven, dan maar het oude ansi-c zodat het zeker overal draait. (compile altijd met -ansi -pedantic)

[ Voor 6% gewijzigd door Zoijar op 26-02-2004 17:10 ]


Verwijderd

Topicstarter
curry684 schreef op 26 februari 2004 @ 17:03:
Geen idee welke C ik gebruik als ik aan het C proggen ben to be honest :P Ik ben van huis uit C++'er... maar welke exotische struct-init-syntax bedoel je?
Ik bedoel de designated initializers, in de wandel gangen beter bekend als 'die rare c99 struct syntax' :)

C:
1
2
3
4
5
6
7
8
9
10
struct info {
        char    name[8+1];
        int     sz;
        int     typ;
};

struct info  arr[] =  {
        [0] = { .sz = 20, .name = "abc" },
        [9] = { .sz = -1, .name = "" }
};


bron: http://david.tribble.com/text/cdiffs.htm#C99-desig-init

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

curry684 schreef op 26 februari 2004 @ 17:03:
maar welke exotische struct-init-syntax bedoel je?
C:
1
2
3
4
5
6
7
struct vector
{
    int x, y, z;
};


struct vector v = { .x = 1; .y = 2; .z = 3; };


struct-members per naam initialiseren dus

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Zoijar schreef op 26 februari 2004 @ 17:08:
Ik denk dat mensen dan eerder C++ gebruiken. Een platform dat C99 ondersteunt heeft ook meestal wel C++.
Inderdaad ja. Dat is wat ik meestal zie. Daarom vroeg ik me dus ook af wie er wel echt C99 gebruikt. Mogen de eerste zich melden! :)

Verwijderd

In de huidige linux-kernels wordt C99 intensief gebruikt in elk geval (voor structs)... En voor embedded programmeurs is er een hoop aan de standaard/standaard C libraries toegevoegd die voorheen met de hand gedaan moest worden, ik denk daar daar de sterkste verbeteringen liggen. Neem bijvoorbeeld de int8_t, uint_least16_t, enz. En dat je variablen niet perse aan het begin van een blok hoeft te declaren, dat programeert gewoon een stuk handiger... Net als die struct-inits (hoezo raar :? ), die zijn ook veel leesbaarder dan de surrogaat oplossing die je voorheen moest gebruiken.

Persoonlijk zou ik het liefst voortaan alle "C" code volgens C99 willen schrijven, alleen zijn nog niet alle compilers die ik moet gebruiken daarop aangepast...

Verwijderd

Topicstarter
Verwijderd schreef op 26 februari 2004 @ 17:57:
Net als die struct-inits (hoezo raar :? ), die zijn ook veel leesbaarder dan de surrogaat oplossing die je voorheen moest gebruiken.
:) Natuurlijk zijn ze niet echt raar. Maar omdat 'men' ze niet kent, en het in C++, C89/C90 en andere C syntax gebasseerde talen (Java, javascript, etc) niet voor komt wordt het al snel als raar aangeduid.

Verwijderd

Verwijderd schreef op 26 februari 2004 @ 18:05:
:) Natuurlijk zijn ze niet echt raar. Maar omdat 'men' ze niet kent, en het in C++, C89/C90 en andere C syntax gebasseerde talen (Java, javascript, etc) niet voor komt wordt het al snel als raar aangeduid.
Veel C-programmeurs "kende" het wel enigszins, voorheen werd dit dan bijvoorbeeld zo gedaan:
C:
1
2
3
4
5
6
7
8
9
10
11
struct vector v = {
  x: 1,
  y: 2,
  z: 3,
};

struct vector w = {
  /* x */ 10,
  /* y */ 4,
  /* z */ 16,
};

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Het vervelende is natuurlijk alleen dat als je de volgorde verwisselt je 2e manier al niet meer correct is :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Sowieso al niet correct; geen van de initializers past in de bitfields ;)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

.oisyn schreef op 27 februari 2004 @ 13:41:
Het vervelende is natuurlijk alleen dat als je de volgorde verwisselt je 2e manier al niet meer correct is :)
Ja, of als je een nieuwe structmember toevoegde, dan waren alle structinitialisties uit sync, dus was je min of meer verplicht eventuele nieuwe members aan het einde van je struct toevoegen...

Trouwens, die eerste methode was volgens mij ook alleen maar een gcc-extensie, maar dat zou ik na moeten zoeken als iemand me niet voor is... ;) Feit is dat een aantal ander compilers het niet ondersteunden.

Wat dat betreft, en eigenlijk wat het grootste deel van C99 betreft, is C-code nu ook veel beter cross-platform en "cross-compiler" te houden. Maar ben ik dan de enige die er wel brood in ziet?!

Verwijderd

MSalters schreef op 27 februari 2004 @ 13:49:
Sowieso al niet correct; geen van de initializers past in de bitfields ;)
Ehm.. gebruik wel de struct vector definitie van .oisyn, ik dacht dat ik die wel even weg kon laten, om niet onnodig in de herhaling te vallen... :X

Goed lezen, er staat toch immers niet:
C:
1
2
3
4
5
struct vector {
   int x:1;
   int y:2;
   int z:3;
};
B)

[ Voor 16% gewijzigd door Verwijderd op 27-02-2004 14:24 . Reden: toelichtende code ]

Pagina: 1