#include<stdio.h>
void f(int a)
{
printf("%d", a);
}
#define f(a) {}
int main()
{
/* call f : function */
}
Come chiamare f
(la funzione)? La scrittura f(3)
non funziona perché è sostituita da {}
con lo stesso nome di una macro
#include<stdio.h>
void f(int a)
{
printf("%d", a);
}
#define f(a) {}
int main()
{
/* call f : function */
}
Come chiamare f
(la funzione)? La scrittura f(3)
non funziona perché è sostituita da {}
con lo stesso nome di una macro
(f)(3);
funziona?
Il preprocessore C non espande la macro f
all'interno di ()
.
Puoi spiegare perché funziona? –
Non sono d'accordo che sia sciocco. Questa è una tecnica che dovrebbe essere conosciuta da ogni programmatore C che intende usare il preprocessore. –
@Prasoon: La sua arroganza per chiamare la domanda "sciocca". Solo perché conosci la risposta, non rende "stupido". – Nawaz
Una soluzione è pubblicato da @Prasoon, un altro potrebbe essere solo l'introduzione di un altro nome per la funzione, se non è possibile modificare il nome della funzione, né il nome della macro:
#include<stdio.h>
void f(int a)
{
printf("%d", a);
}
#define fun (f) //braces is necessary
#define f(a) {}
int main()
{
fun(100);
}
Demo in linea : http://www.ideone.com/fbTcE
int main()
{
#undef f // clear f!
f(3);
}
Dopo la macro undef è andata! – Nyan
@Nyan e hai downvoted per quello :). L'interrogante non ha menzionato tale condizione. Prendi il caso se la macro è definita in un file di intestazione comune e viene utilizzata in molti altri file. Per i file che non vuoi usare, dovrai semplicemente "# undef". – iammilind
+1 per scrivere una risposta corretta che probabilmente infastidirà l'intervistatore! – Raynos
Usa puntatore a funzione per raggiungere questo obiettivo:
int main() {
void (*p)(int a);
p = f;
p(3); //--> will call f(3)
return 0;
}
Non stupido. Supponiamo di avere una macro che implementa una sostituzione in linea per 'f' nel suo file di intestazione e si desidera utilizzare questa macro per definire l'implementazione esterna nel file di implementazione. Questa è una pratica standard. –
È una domanda stupida come intervista. Non vorrei lavorare per un'azienda che ha bisogno di questo. –