Portál AbcLinuxu, 18. dubna 2024 09:35


Dotaz: Jazyk C, norma ANSI, gcc a mknod() v linux

23.2.2005 16:32 petr_p
Jazyk C, norma ANSI, gcc a mknod() v linux
Přečteno: 194×
Odpovědět | Admin
Zjistil jsem, ze program, ktery pouziva systemove volani mknod(), neni mozne zkompilovat s volbou -ansi. Muze za to deklarace mknod() ve sys/stat.h, ktera je podminena definici __USE_MISC || defined __USE_BSD || defined __USE_XOPEN_EXTENDED. Podobne je na tom makro S_IFSOCK.

Vzdy jsem mel za to, ze norma ANSI definuje syntaxy a tak trochu i semantiku cecka a mozna i nejakou rozumnou mnozinu funkci standardni knihovny libc. V tomto pripade se ale projevuje i u sluzeb jadra.

Tudiz si myslim, ze se jedna o chybu v hlavickovych souborech. Mohl by mi nekdo potrvdit nebo vyvratit tuto teori a moje chapani normy ANSI jazyka C?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

23.2.2005 16:46 Michal Čihař | skóre: 61 | blog: Bláboly | Praha
Rozbalit Rozbalit vše Re: Jazyk C, norma ANSI, gcc a mknod() v linux
Odpovědět | | Sbalit | Link | Blokovat | Admin
Stručně (zbytek si dohledej): -ansi definuje makro __STRICT_ANSI__. To způsobí že se v <features.h> nenadefinuje žádné z maker které jsou definované jinak (POSIX, XOPEN a co já vím co ještě). Takže pokud chceš použít něco z funkcí definovaných těmito standardy, přidej třeba -D_GNU_SOURCE.
Weblate - překládání přes web | Gammu SMSD - posílání SMS | Blog
23.2.2005 18:41 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Jazyk C, norma ANSI, gcc a mknod() v linux
Dodal bych, že -ansi stejně nevypíná všechna rozšíření, jen ta konfliktní (jako nová klíčová slova). Např. __attribute__() (celkem přirozeně) funguje stále.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.