PDA

View Full Version : [C++]Define strano


Kleidemos
02-09-2003, 11:25
/* Caches aren't brain-dead on the intel. */
#define flush_cache_all() do { } while (0)
#define flush_cache_mm(mm) do { } while (0)
#define flush_cache_range(vma, start, end) do { } while (0)
#define flush_cache_page(vma, vmaddr) do { } while (0)
#define flush_dcache_page(page) do { } while (0)
#define flush_icache_range(start, end) do { } while (0)
#define flush_icache_page(vma,pg) do { } while (0)
#define flush_icache_user_range(vma,pg,adr,len) do { } while (0)



Come funziano questi define ????

Fonte: kernel 2.6-test4

ilsensine
02-09-2003, 11:29
Sono no-op, non definiscono nulla. Probabilmente sono inclusi in un blocco
#ifdef qualcosa
#define flush_cache_all() do { } while (0)
#else
extern void flush_cache_all();
#endif

Il ciclio do { } while (0) serve solo a poter usare la stessa punteggiatura come se la macro fosse una funzione.

Kleidemos
02-09-2003, 11:31
ho capito costruendomi un esempio:


#include <iostream>
#include <cstdio>
#include <cstring>

#define flush( NOME ) do { cout << NOME; } while ( strcmp(NOME, "$") != true )

using namespace std;

int main()
{
flush( "A$\n" );
system( "PAUSE ");
return 0;
}




Tnk cmq

Mason
02-09-2003, 14:26
e una faq di kernelnewbies

http://www.kernelnewbies.org/faq/index.php3#dowhile

mjordan
02-09-2003, 19:37
Kleidemos tu comunque mi sa che confondi il C con il C++ e sebbene a volte non rilevante, questa è una gravità atroce.

cionci
02-09-2003, 19:53
Ti riferisci a questo ?

strcmp(NOME, "$") != true

Kleidemos
02-09-2003, 21:03
Originariamente inviato da mjordan
Kleidemos tu comunque mi sa che confondi il C con il C++ e sebbene a volte non rilevante, questa è una gravità atroce.

e perche?
Le funz del c nn possono essere usate in C++??

mjordan
03-09-2003, 14:44
Originariamente inviato da Kleidemos
e perche?
Le funz del c nn possono essere usate in C++??

Certo.
Ma C != C++ => C++ = C + 1

Kleidemos
03-09-2003, 14:47
Ma l'importante nn come fai qulacosa(in linea di massima) ma il farlo

cionci
03-09-2003, 15:02
Originariamente inviato da Kleidemos
Ma l'importante nn come fai qulacosa(in linea di massima) ma il farlo
Su questo non sono d'accordo...bisogna avere stile nel programmare... Se non c'è stile ci limitiamo solamente a "scrivere codice" ;):sofico:

Kleidemos
03-09-2003, 15:04
Originariamente inviato da cionci
Su questo non sono d'accordo...bisogna avere stile nel programmare... Se non c'è stile ci limitiamo solamente a "scrivere codice" ;):sofico:

ma in fondo il codice sono 1 e 0 che vengono inviati da e alla CPU............... il risultato e sempre uguale!
Se poi il codice deve essere elegante, ok...........ma prima deve funziare:D

cionci
03-09-2003, 15:16
Un codice elegante molte volte può funzionare meglio di uno non elegante ;) :D

Kleidemos
03-09-2003, 15:31
Originariamente inviato da cionci
Un codice elegante molte volte può funzionare meglio di uno non elegante ;) :D
esempio?
:D

cionci
03-09-2003, 15:32
Scrivere un esempio di punto in bianco non si può...bisogna confrontarlo con un altro codice...

mjordan
03-09-2003, 15:54
Originariamente inviato da Kleidemos
esempio?
:D

Esempio:


List * node = NULL;

if (node != NULL) {

....
}


è molto + inefficiente che scrivere:



List * node = NULL;

if (node) {
....
}


Questo perchè nel primo esempio il compilatore tratta le espressioni in maniera diversa a seconda del tipo di espressione. E la seconda forma risulta + concisa e + facilmente ottimizzabile dal compilatore.

Secondo esempio:



int i;

for (i = 0; i < 10; i++) {
....
}


è molto meno efficiente che scrivere:



for (register int i = 0; i < 10; i++) {
...
}


per due motivi. Si mantiene una variabile che è locale ad un ciclo. Si dichiara una variabile register molto + ottimizzabile dal compilatore. E' comunque una richiesta che non potrebbe essere soddisfatta dal compilatore.

Potrei continuare per ore ...

Kleidemos
03-09-2003, 15:56
Continua qualche minuto che è very interesting

mjordan
03-09-2003, 16:08
Originariamente inviato da Kleidemos
Continua qualche minuto che è very interesting

Per te è very interesting, per me è very boring :p

cionci
03-09-2003, 16:28
Sempre nell'esempio del for, addirittura c'è chi dice che fare

++i

sia più efficiente che fare

i++

cosa che non ho ami verificato....

Io ormai ho preso l'abitudine di fare ++i ed ormai lo faccio sempre...