> For the complete documentation index, see [llms.txt](https://docs.aic-eec.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.aic-eec.com/c-c++-for-embedded-programming/c-programming-techniques/c-c++-preprocessing/conditional-compilation.md).

# Conditional Compilation

เทคนิคนี้จะใช้เงื่อนไขเหมือน if-else ที่เราเขียนโปรแกรมกันมาใช้งานครับ แล้วมันแตกต่างกับเงื่อนไขปกติที่เราใช้กันยังไงมาดูกันครับ

โดยปกติเทคนิคแบบนี้เราจะเจอภายใน header file หรือ library เป็นหลักครับ โดยมักจะใช้เพื่อเลือกเงื่อนไขก่อนการทำการคอมไพล์ ดังนั้นเงื่อนไขในการใช้เทคนิคการ Preprocessing ที่เป็นเงื่อนไขนั้นจะใช้เลือก สถาปัตยกรรม ฟังก์ชันหรือตัว source code ที่จะนำไป compile โดยตัวเงื่อนไขลักษณะนี้จะประกอบไปด้วย

* **#Ifdef <-- ถ้า เปิดเงื่อนไขถ้าเป็น 1 จะทำงานในเงื่อนไขนี้**
* **#ifndef <-- ถ้า-ไม่ ถ้าเงื่อนไขไม่เป็น 1 เป็น 0 จะทำงานในเงื่อนไขนี้**&#x20;
* **#elif <-- เงื่อนไขอื่นอันนี้ก็ทำงานในกรณีเป็น 1**
* **#else <-- ถ้าไม่มีเงื่อนไขอื่นๆแล้วจะทำในส่วนนี้**
* **#endif <-- ใช้ปิดเงื่อนไข**

#### Example

![เงื่อนไขในการเลือก Platform ในการคอมไพล์](https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MClo3nC-1US0rbK8Qau%2F-MQybeZXI5cJcIoH2vvw%2F-MQyeij0f3kDNR4aU0ai%2Fimage.png?alt=media\&token=dad60042-239f-4d0c-9b6f-8503bb20fa82)

```c
#ifdef (KL25_PLATFORM) && !(MSP_PLOATFORM)
    kl25_initial();
#elif (MSP_PLOATFORM) && !(KL25_PLATFORM)
    msp_initial();
#else
    #error "Please specific one platform target"
#endif
```

จากโค้ดด้านบนและรูปจะเห็นการทำงานจะเป็นการเลือก platform บนบอร์ดที่จะใช้งานเพื่อให้สามารถเลือกการโปรแกรมคอมไพล์บนโค้ดชุดเดียวกันแต่แตกต่างกันเพียง library ได้โดยไม่ต้องสร้างโค้ดอีกชุด
