Portál AbcLinuxu, 20. dubna 2024 00:07


Dotaz: Jak přiřadit statické pole v gcc?

21.2.2008 11:57 dustin | skóre: 63 | blog: dustin
Jak přiřadit statické pole v gcc?
Přečteno: 357×
Odpovědět | Admin
Zdravím, při úpravě jaderného modulu alsy jsem narazil na problém s přiřazením statického pole.

Původní kód obsahuje statické pole stringů vzorkovacích frekvencí definované ve funkci, která využívá jednotlivé položky tohoto pole.
static const char * const texts_1724[] = {
		"8000",		/* 0: 6 */
		...................
		"192000",	/* 14: 14 */
		"IEC958 Input",	/* 15: -- */
	};
Protože některé karty podporují jen některé z těchto frekvencí, potřebuji kód zobecnit, aby se nepracovalo rovnou s tímto statickým polem, ale s polem příslušným dané kartě.

Tedy jsem definici tohoto pole přesunul z funkce na hlavní úroveň, do struktury karty přidal novou položku a v inicializaci struktury se snažím jí toto pole přiřadit.
struct snd_ice1712 {
............
	struct ice1712_rates_info {
		....
		char * * texts;			/* list of rate strings */
	} rates_info;
}
Přiřazení v inicializaci provádím
ice->rates_info.texts = texts_1724;
Bohužel toto hodí při kompilaci warning: assignment from incompatible pointer type. Zkoušel sem všechny možné varianty definice položky texts, různě odstraňovat consty u definice statického pole, ale nedokázal jsem warning (někdy rovnou error) odstranit. Má znalost C pro gcc je poměrně chatrná. Velice děkuji za radu či doporučení.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

21.2.2008 12:05 Martin
Rozbalit Rozbalit vše Re: Jak přiřadit statické pole v gcc?
Odpovědět | | Sbalit | Link | Blokovat | Admin
puvodni denlarace je const char * const texts_1724[] konstantni ukazatel na konstanti pole
Vy pouzivate nekonstantni ukazatel na nekonstantni string char **texts. Neni ta hlaska zpusobena prave tim?
21.2.2008 12:19 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Jak přiřadit statické pole v gcc?
Zkoušel jsem:

const char * texts[]; vede na error: invalid use of flexible array member char * texts[]; vede na error: invalid use of flexible array member

const char ** texts; vede na warning: assignment discards qualifiers from pointer target type
21.2.2008 12:35 mity | skóre: 6 | Praha
Rozbalit Rozbalit vše Re: Jak přiřadit statické pole v gcc?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Promenna texts_1724 je konstantni pole konstantnich stringu. (vsimnete si dvojnasobneho vyskytu slova "const").

Musite tedy deklarovat konstantni pointer na konstantni string:

static const char * const texts_1724[] = { "8000", /* 0: 6 */ ................... "192000", /* 14: 14 */ "IEC958 Input", /* 15: -- */ };

static const char* const* ptr; /* <-- !!! */

static void my_func(void) { ... ptr = texts_1724; ... }
21.2.2008 13:09 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Jak přiřadit statické pole v gcc?
Děkuji. Ta proměnná text je položkou structu, kde static nezafungoval (error: expected specifier-qualifier-list before 'static'). Nicméně řešení

const char* const* texts;

skouslo gcc bez připomínek. Ještě jednou všem děkuji.
21.2.2008 14:33 podlesh | skóre: 38 | Freiburg im Breisgau
Rozbalit Rozbalit vše Re: Jak přiřadit statické pole v gcc?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Já bych doporučil používat typedef. Žonglování s hvězdičkami je spíš pro vztek.
21.2.2008 14:38 R
Rozbalit Rozbalit vše Re: Jak přiřadit statické pole v gcc?
typedef sa nema pouzivat v driveroch.
21.2.2008 14:52 finn | skóre: 43 | blog: finnlandia | 49° 44´/13° 22´
Rozbalit Rozbalit vše Re: Jak přiřadit statické pole v gcc?
Proč?
Užívej dne – možná je tvůj poslední.
21.2.2008 15:02 R
Rozbalit Rozbalit vše Re: Jak přiřadit statické pole v gcc?
Documentation/CodingStyle
21.2.2008 14:55 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Jak přiřadit statické pole v gcc?
Děkuji za doporučení. Přeci jenom jde o úpravu stávajícího kódu a nechci dělat více změn, než je nutné.

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.