|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
[C] Strutture con campi assegnati con il punto
Salve a tutti,
stavo vedendo un modulo del kernel di Linux che ha una struttura così definita: Codice:
static struct i2c_algorithm ov518_i2c_algo = {
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 14)
.name = "OV518 algorithm",
.id = I2C_ALGO_SMBUS,
#endif
.smbus_xfer = ov518_smbus_xfer,
.algo_control = ov51x_i2c_control,
.functionality = ov518_i2c_func,
};
Inoltre, perché si fa così? E' forse la stessa cosa che si fa dopo aver dichiarato una struttura, e tramite il nome della variabile di quel tipo si mette il punto e si assegnano i valori? Ovvero: ov518_i2c_algo.functionality = ov518_i2c_func; ?? Grazie. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Perchè se non fosse ostico e cripitco non lo avrebbero messo nel kernel linux
![]() Cmq bisogna notare che prima della graffa c'è un uguale, e che le assegnazioni sono terminate da , invece che da ;... per cui quella la non è una definizione, ma un assegnamento. Il .comunque non so a che serva... Ultima modifica di Tommo : 23-09-2008 alle 18:35. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Infatti non è una dichiarazione. Serve ad inizializzare solo certi campi (che nelle struct hanno un nome). Potrebbe essere una struct con 200 elementi e ne inizializzi solo il terzo (per esempio), se vuoi, con quella scrittura.
ciao
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Ok, sul fatto che era una inizializzazione c'ero arrivato, ma quindi è una struttura dichiarata altrove? Ho visto che nel kernel (2.6.25) è definita in linux/i2c.h ma i campi non corrispondono.
Tipicamente io posso definire una una struttura in un file .h, poi in un mio file sorgente .c posso dichiararla come variabile, inizializzarla e usarla ecc.. Quando ci sono quei punti invece, che differenza c'è nell'utilizzo, a parte che è una inizializzazione di campi? |
|
|
|
|
|
#5 | ||
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Quote:
Codice:
#include <stdio.h>
struct prova
{
int primo;
int secondo;
int terzo;
};
int main()
{
struct prova P = { .secondo = 10 };
printf("P\n{\n\t.primo = %d;\n\t.secondo = %d;\n\t.terzo = %d;\n}\n", P.primo, P.secondo, P.terzo);
return 0;
}
Codice:
$ ./prova
P
{
.primo = 0;
.secondo = 10;
.terzo = 0;
}
Codice:
gcc -W -Wall -ansi -pedantic main.c -o ./struct main.c: In function 'main': main.c:12: warning: ISO C90 forbids specifying subobject to initialize
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
||
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Grazie è chiarissimo l'esempio. Ora non ho più dubbi!
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:09.






















