Mam do czynienia z problemem ze zrozumieniem użycia wywołań funkcji makra z instrukcji printf().Makro wywołanie funkcji z instrukcji printf w C
Mam poniższy kod:
#include<stdio.h>
#define f(g,h) g##h
main()
{
printf("%d",f(100,10));
}
Ten kod wyjścia "10010" jako odpowiedź.
Nauczyłem się, że wywołanie funkcji makro po prostu kopiuje kod funkcji makr w miejsce wywołania z zastąpionymi argumentami.
więc kod powinien być jak:
#include<stdio.h>
#define f(g,h) g##h
main()
{
printf("%d",100##10);
}
Ale kiedy wykonywane powyższy kod osobno z podstawionym makro, pojawia się błąd kompilacji.
Jak więc pierwszy kod daje 10010 jako odpowiedź, podczas gdy drugi kod podaje błąd kompilacji?
## jest poprawne tylko WEWNĄTRZ Twojego zdania #define i nie ma żadnego efektu, chyba że wiersz zaczyna się od "#define [twoje rzeczy tutaj]", ponieważ "#define" jest tym, co nakazuje kompilatorowi potraktowanie tej części kodować specjalnie. – ActiveTrayPrntrTagDataStrDrvr
'## 'zapewnia, że parametry są łączone. Dlatego: f (100,10) jest zastąpione przez preprocesor w: 10010 – Tomas