Cにおける条件コンパイル
1428 ワード
C言語には3つの前処理方式がある:マクロ定義、ファイル含む、条件コンパイル.
今回のプロジェクトファイルは機知クラウドに対応したシリアルポート構成関数であり,マクロ定義による修正を実現し,それに接続されたシリアルポートを自動的に認識し,シリアルポート初期化関連コードを実現することを望んでいるので,この機会に条件コンパイルがどうなっているのかを理解した.多くのオープンソースコードの中で、例えばFATFS、各種RTOSの中で非常に多くの条件コンパイル内容#if、#elif、#endifなどが見られ、この方式はプログラムの移植、デバッグなどに有利である.
条件コンパイルの一般的な形式1:
式とブロックはCの構文と一致し、以下は部分コードである.
コード構築情報ウィンドウに対応する情報を印刷できるerrorとwarningを用いた.defined(マクロ1)は、マクロ1が定義されているか否かを判断することができ、定義されている場合、(defined(マクロ1))この式は1であり、逆に0である.
今回のプロジェクトファイルは機知クラウドに対応したシリアルポート構成関数であり,マクロ定義による修正を実現し,それに接続されたシリアルポートを自動的に認識し,シリアルポート初期化関連コードを実現することを望んでいるので,この機会に条件コンパイルがどうなっているのかを理解した.多くのオープンソースコードの中で、例えばFATFS、各種RTOSの中で非常に多くの条件コンパイル内容#if、#elif、#endifなどが見られ、この方式はプログラムの移植、デバッグなどに有利である.
条件コンパイルの一般的な形式1:
#if 1
1
#elif 2
2
......
#else
n
#endif
式とブロックはCの構文と一致し、以下は部分コードである.
// GIZ_UART wifi
#if GIZ_UART == 1
#define GIZ_UART_PORT USART1
#define GIZ_UART_NVIC USART1_IRQn
#define GIZ_UART_PORT_RCC RCC_APB2Periph_USART1
#warning 1 wifi !
#elif GIZ_UART == 2
#define GIZ_UART_PORT USART2
#define GIZ_UART_NVIC USART2_IRQn
#define GIZ_UART_PORT_RCC RCC_APB1Periph_USART2
#elif GIZ_UART == 3
#define GIZ_UART_PORT USART3
#define GIZ_UART_NVIC USART3_IRQn
#define GIZ_UART_PORT_RCC RCC_APB1Periph_USART3
#elif defined(STM32F10X_HD)||defined(STM32F10X_HD_VL)||\
defined(STM32F10X_XL)||defined(STM32F10X_CL) // UART4
#ifdef GIZ_UART == 4
#define GIZ_UART_PORT USART4
#define GIZ_UART_PORT_RCC RCC_APB1Periph_UART4
#elif GIZ_UART == 5
#define GIZ_UART_PORT USART5
#define GIZ_UART_PORT_RCC RCC_APB1Periph_UART5
#else //
#error USART
#endif
#else //
#error
#endif
コード構築情報ウィンドウに対応する情報を印刷できるerrorとwarningを用いた.defined(マクロ1)は、マクロ1が定義されているか否かを判断することができ、定義されている場合、(defined(マクロ1))この式は1であり、逆に0である.