Co oznaczają następujące oświadczenie:#define IDENTIFIER bez token
#define FAHAD
jestem zaznajomiony z wypowiedzi, takich jak:
#define FAHAD 1
ale co oświadczenie #define bez tokena oznacza? Czy to jest podobne do stałej definicji?
Co oznaczają następujące oświadczenie:#define IDENTIFIER bez token
#define FAHAD
jestem zaznajomiony z wypowiedzi, takich jak:
#define FAHAD 1
ale co oświadczenie #define bez tokena oznacza? Czy to jest podobne do stałej definicji?
to znaczy, że FAHAD
jest zdefiniowana, można później sprawdzić, czy jest zdefiniowana lub nie z:
#ifdef FAHAD
//do something
#else
//something else
#endif
Lub:
#ifndef FAHAD //if not defined
//do something
#endif
przykładem wykorzystanie prawdziwe życie jest sprawdzenie, czy funkcja lub nagłówek jest dostępny dla twojej platformy, zazwyczaj system kompilacji definiuje makra, aby wskazać, że niektóre funkcje lub nagłówki istnieją przed rozpoczęciem kompilacji, na przykład sprawdza, czy dostępna jest signal.h
:
#ifdef HAVE_SIGNAL_H
# include <signal.h>
#endif/*HAVE_SIGNAL_H*/
ten sprawdza, czy niektóre funkcja jest dostępna
#ifdef HAVE_SOME_FUNCTION
//use this function
#else
//else use another one
#endif
Definiowanie stała bez wartości czynów jako flaga do preprocesora, i mogą być stosowane w taki sposób:
#define MY_FLAG
#ifdef MY_FLAG
/* If we defined MY_FLAG, we want this to be compiled */
#else
/* We did not define MY_FLAG, we want this to be compiled instead */
#endif
Wszelkie #define
powoduje zastąpienie oryginalnego identyfikatora zastępującymi tokenami. Jeśli nie ma żadnych żetonów zamienne, wymiana jest pusty:
#define DEF_A "some stuff"
#define DEF_B 42
#define DEF_C
printf("%s is %d\n", DEF_A, DEF_B DEF_C);
rozszerza się:
printf("%s is %d\n", "some stuff", 42);
umieścić spację między 42
i )
wskazanie „nic”, które DEF_C
rozszerzonym, ale przynajmniej pod względem języka, wyjście preprocesora jest jedynie strumieniem tokenów. (Rzeczywiste kompilatory generalnie pozwalają zobaczyć wyjście preprocesora.Każda będzie tu biała-przestrzeń zależy od rzeczywistego preprocesora.Jeśli GNU cpp, jest jeden.)
Podobnie jak w innych odpowiedzi do tej pory, można użyć #ifdef
, aby sprawdzić, czy identyfikator był #define
d. Możesz również napisać:
#if defined(DEF_C)
na przykład. Testy te są pozytywne (tj. Identyfikator jest zdefiniowany jako), nawet jeśli rozszerzenie jest puste.
#define FAHAD
to będzie działać jak flaga kompilatora, pod którą można wykonać kod. będzie to poinstruować kompilator kompilacji kodu obecny w tej opcji kompilatora
#ifdef FAHAD
printf();
#else
/* NA */
#endif
patrz także o [związek] (http://stackoverflow.com/questions/7594808/what-use-cases-necessitate-define- bez-a-tokenu) dla odpowiedzi. –