Ho osservato lo GCC docs per la definizione dei macro e sembra che ciò che voglio non sia possibile, ma immagino che se lo fosse, qualcuno qui lo saprebbe.È possibile definire una macro simile a una funzione con un corpo variabile?
Quello che voglio fare è definire questa macro:
synchronized(x) {
do_thing();
}
che si espande a:
{
pthread_mutex_lock(&x);
do_thing();
pthread_mutex_unlock(&x);
}
In C++ ho potuto solo fare un oggetto SynchronizedBlock
che ottiene il blocco nel suo costruttore e sblocca nel distruttore, ma non ho idea di come farlo in C.
Mi rendo conto che potrei usare un puntatore di funzione nel modulo synchronized(x, &myfunction);
, ma il mio l'obiettivo è far sì che un codice C assomigli il più possibile a Java. E sì, so che questo è malvagio.
Dovresti davvero pensarci due volte prima di provare a far sembrare un linguaggio come un altro. Una macro che assomiglia alla sintassi che stai chiedendo sarebbe estremamente confusa per qualcuno che la legge come C. –
R. ha ragione che questo potrebbe rendere le cose difficili da leggere, dal momento che non è facilmente visibile che questa è una macro. Penso che la cosa migliore sia attenersi alla convenzione che le macro dovrebbero essere maiuscole e che il nome dovrebbe essere davvero informativo. Proverò qualcosa come "MUTUALY_EXCLUDE' o così. –
^'E sì, so che questo è il male. –