PDA

Visualizza la versione completa : X esperti di C


michelez
14-12-2002, 20:21
Salve, aprofitto per postare qui alcuni miei dubbi e perplessitÓ rigurdante questo linguaggio.

Sono un newbie, e volevo fare solo 2 domande:

1) Meglio usare i=i+1 i++ o i+=1?
Volevo sapere qual'era il migliore in termine di velocitÓ e perchŔ
2) PerchŔ se dichiaro


char s[4]="ciao";

Non funziona?...essi che ciao Ŕ formata da 4 lettere.

Grazie

l.golinelli
14-12-2002, 21:27
1) Secondo me Ŕ la stessa cosa in termini di velocitÓ... Io uso sempre i++ risparmio di digitare qualche carattere...

2) char s[4] = {'c','i','a','o'}

:ciauz:

$$$
14-12-2002, 21:56
credo che sia meglio usare var+=n invece che var=var+n xke in fase di esecuzione risulta di 1 istruzione in meno.

Sergio Pedone
14-12-2002, 22:08
Originariamente inviato da michelez
Salve, aprofitto per postare qui alcuni miei dubbi e perplessitÓ rigurdante questo linguaggio.

Sono un newbie, e volevo fare solo 2 domande:

1) Meglio usare i=i+1 i++ o i+=1?
Volevo sapere qual'era il migliore in termine di velocitÓ e perchŔ
2) PerchŔ se dichiaro


char s[4]="ciao";

Non funziona?...essi che ciao Ŕ formata da 4 lettere.

Grazie

1) usa tranquillamente i++, il codice risulta pi¨ snello e leggibile

2) dovresti dichiarare l'array di caretteri con un valore in pi¨ per contenere anche il carattere terminatore di stringa:

char s[5] = "ciao";

:ciauz:

wolf64
14-12-2002, 22:24
Come ti dice anche Sergio usa i++, se poi devi incrementare di pi¨ di 1 usa i+=2 (ad esempio), oltre che rendere il codice pi¨ leggibile sembra produrre anche degli algoritmi migliori in fase di compilazione.

Per "char" ti confermo anche in questo caso il discorso di Sergio, una stringa in C Ŕ un array di caratteri che termina con il carattere terminatore, in effetti con



char s[4]="ciao";



ti da un output di questo tipo: ciao8§ ┐Ý@

mentre con



char s[5]="ciao";



l'output Ŕ "pulito": ciao

Ciao :gren:

r0x
15-12-2002, 15:35
Premessa: per gli x86. Conosco solo quelli.. :(

1) i++ e` il piu` immediato perche` si riduce ad un`istruzione sola, e con un solo operando (tralasciando i vari ptr e le ottimizzazioni):



inc [i]


2) Poi viene 'i += 1', 1 istruzione:



add [i], 1


3) E infine 'i = i + 1', 3 istruzioni:



mov eax, [i]
add eax, 1
mov [i], eax


In genere il compilatore si preoccupa di ottimizzare al meglio. In ogni caso usa 'i++', per tutti i motivi gia` citati.

Ciao.

Loading