2009-02-11 2 views
2

В настоящее время я работаю над некоторым исходным кодом. В некоторых кодах я нахожу их во главе. Не знаю, что это значит. Есть идеи?Что означает «#if cpp» в файле C?

#include "pth_p.h" 

#if cpp 

#ifndef PTH_DEBUG 

#define pth_debug1(a1)      /* NOP */ 
#define pth_debug2(a1, a2)     /* NOP */ 
#define pth_debug3(a1, a2, a3)    /* NOP */ 
#define pth_debug4(a1, a2, a3, a4)   /* NOP */ 
#define pth_debug5(a1, a2, a3, a4, a5)  /* NOP */ 
#define pth_debug6(a1, a2, a3, a4, a5, a6) /* NOP */ 

#else 

#define pth_debug1(a1)      pth_debug(__FILE__, __LINE__, 1, a1) 
#define pth_debug2(a1, a2)     pth_debug(__FILE__, __LINE__, 2, a1, a2) 
#define pth_debug3(a1, a2, a3)    pth_debug(__FILE__, __LINE__, 3, a1, a2, a3) 
#define pth_debug4(a1, a2, a3, a4)   pth_debug(__FILE__, __LINE__, 4, a1, a2, a3, a4) 
#define pth_debug5(a1, a2, a3, a4, a5)  pth_debug(__FILE__, __LINE__, 5, a1, a2, a3, a4, a5) 
#define pth_debug6(a1, a2, a3, a4, a5, a6) pth_debug(__FILE__, __LINE__, 6, a1, a2, a3, a4, a5, a6) 

#endif /* PTH_DEBUG */ 

#endif /* cpp */ 

ответ

10

он тестирует, если константа с именем cpp, которая видна препроцессору (вероятно, макрос), отлична от нуля.

Обычное соглашение заключается в том, что макросы должны быть в прописном, чтобы они были более очевидными, но они не обязательно должны быть (как это, по-видимому, здесь).

Я предполагаю, что он означает C++, и один из включенных заголовков (возможно, pth_p.h?) Определяет его, если используется компилятор C++. Если это так, то есть более стандартные вещи, чтобы использовать, которые являются предпочтительными, такие как это:

#ifdef __cplusplus 
4

Это пример директивы препроцессора, которая позволяет вам проверять выражение во время компиляции. Here is a good explanation.

2

Я подозреваю, что это проверка ли код компилируется с помощью C++ компилятор или компилятор Си. Если C++, макросы определены, если установлен флаг PTH_DEBUG. Я подозреваю, что этот флаг будет установлен в вызове компилятора. Если C, макросы не определены. Почему это так, зависит от того, какие макросы pth_debug предназначены для выполнения.

Смежные вопросы