<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # C 預處理器和宏 > 原文: [https://www.programiz.com/c-programming/c-preprocessor-macros](https://www.programiz.com/c-programming/c-preprocessor-macros) #### 在本教程中,將向您介紹 c 預處理器,并在示例的幫助下學習使用`#include`,`#define`和條件編譯。 ![Working of a preprocessor in C programming](https://img.kancloud.cn/42/67/4267026bfcc0be5be7b6224579bb990a_740x400.png) C 預處理器是一個宏預處理器(允許您定義宏),可以在編譯程序之前對其進行轉換。 這些轉換可以包括頭文件,宏擴展等。 所有預處理指令均以`#`符號開頭。 例如, ```c #define PI 3.14 ``` C 預處理器的一些常見用法是: * * * ## 包括頭文件:`#include` `#include`預處理器用于將頭文件包含到 C 程序中。 例如, ```c #include <stdio.h> ``` 在此,`stdio.h`是頭文件。`#include`預處理器指令將上述行替換為`stdio.h`頭文件的內容。 這就是為什么在使用`scanf()`和`printf()`之類的函數之前需要使用`#include <stdio.h>`的原因。 您還可以創建自己的包含函數聲明的頭文件,并使用此預處理器指令將其包含在程序中。 ```c #include "my_header.h" ``` 訪問此頁面以[了解有關頭文件的更多信息](https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html#Header-Files "Include preprocessor")。 * * * ## 使用`#define`的宏 宏是被命名的代碼片段。 您可以使用`#define`預處理器指令在 C 中定義宏。 這是一個例子。 ```c #define c 299792458 // speed of light ``` 在這里,當我們在程序中使用`c`時,將其替換為`299792458`。 * * * ### 示例 1:`#define`預處理器 ```c #include <stdio.h> #define PI 3.1415 int main() { float radius, area; printf("Enter the radius: "); scanf("%f", &radius); // Notice, the use of PI area = PI*radius*radius; printf("Area=%.2f",area); return 0; } ``` * * * ## 像宏一樣的函數 您還可以定義以類似于函數調用的方式工作的宏。 這稱為類函數宏。 例如, ```c #define circleArea(r) (3.1415*(r)*(r)) ``` 每次程序遇到`circleArea(argument)`時,都將其替換為`(3.1415*(argument)*(argument))`。 假設我們傳遞了 5 作為參數,則它擴展如下: ```c circleArea(5) expands to (3.1415*5*5) ``` * * * ### 示例 2:使用`#define`預處理器 ```c #include <stdio.h> #define PI 3.1415 #define circleArea(r) (PI*r*r) int main() { float radius, area; printf("Enter the radius: "); scanf("%f", &radius); area = circleArea(radius); printf("Area = %.2f", area); return 0; } ``` 訪問此頁面以了解有關[宏和`#define`預處理器](https://gcc.gnu.org/onlinedocs/cpp/Macros.html#Macros "C Macros")的更多信息。 * * * ## 條件編譯 在 C 編程中,您可以指示預處理器是否包含代碼塊。 為此,可以使用條件指令。 它類似于`if`語句,但有一個主要區別。 在執行期間測試`if`語句,以檢查是否應執行代碼塊,而條件語句用于在執行之前在程序中包含(或跳過)代碼塊。 * * * ### 條件的用法 * 根據機器,操作系統使用不同的代碼 * 在兩個不同的程序中編譯相同的源文件 * 從程序中排除某些代碼,但保留以備將來參考 * * * ### 如何使用條件? 要使用條件指令,請使用`#ifdef`,`#if`,`#defined`,`#else`和`#elseif`指令。 * * * ### `#ifdef`指令 ```c #ifdef MACRO // conditional codes #endif ``` 在此,僅當定義了`MACRO`時,條件代碼才包含在程序中。 * * * ### `#if`,`#elif`和`#else`指令 ```c #if expression // conditional codes #endif ``` 在這里,`expression`是整數類型的表達式(可以是整數,字符,算術表達式,宏等)。 僅當將`expression`求值為非零值時,條件代碼才包含在程序中。 可選的`#else`指令可與`#if`指令一起使用。 ```c #if expression conditional codes if expression is non-zero #else conditional if expression is 0 #endif ``` 您還可以使用`#elif`將嵌套條件添加到`#if...#else` ```c #if expression // conditional codes if expression is non-zero #elif expression1 // conditional codes if expression is non-zero #elif expression2 // conditional codes if expression is non-zero #else // conditional if all expressions are 0 #endif ``` * * * ### `#defined` 特殊運算符`#defined`用于測試是否定義了某個宏。 通常與`#if`指令一起使用。 ```c #if defined BUFFER_SIZE && BUFFER_SIZE >= 2048 // codes ``` * * * ## 預定義的宏 這是 C 編程中的一些預定義宏。 | 宏 | 值 | | --- | --- | | `__DATE__` | 包含當前日期的字符串 | | `__FILE__` | 包含文件名的字符串 | | `__LINE__` | 代表當前行號的整數 | | `__STDC__` | 如果遵循 ANSI 標準 C,則該值為非零整數 | | `__TIME__` | 包含當前日期的字符串。 | * * * ### 示例 3:使用`__TIME__`獲取當前時間 以下程序使用`__TIME__`宏輸出當前時間。 ```c #include <stdio.h> int main() { printf("Current time: %s",__TIME__); } ``` **輸出** ```c Current time: 19:54:39 ``` * * * ### 推薦閱讀 * [線路控制](https://gcc.gnu.org/onlinedocs/cpp/Line-Control.html#Line-Control) * [語法](https://gcc.gnu.org/onlinedocs/cpp/Pragmas.html#Pragmas) * [預處理器輸出](https://gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html#Preprocessor-Output) * [其他指令](https://gcc.gnu.org/onlinedocs/cpp/Other-Directives.html#Other-Directives)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看