Preprocessor ในภาษา C มีอะไรบ้าง จัดทำโดย : langjuko พิมพ์

Preprocessor ในภาษา C มีอะไรบ้าง

เรื่องของ #include

#include <ชื่อไฟล์ส่วนหัว>
#include “ชื่อไฟล์ส่วนหัว”

การใช้ #include มีสองลักษณะ คือ ใช้เครื่องหมาย <….> เพื่อบอกว่าตำแหน่งของไฟล์ .h นั้นอยู่ในโฟลเดอร์ lib แต่ถ้าใช้ “…” นั้นหมายความว่าไฟล์ส่วนหัวอยู่ในโฟลเดอร์ปัจจุบันของไฟล์โปรแกรม

Example

Mylibrary.h

int GetSum( int x, int y)
{
 return x+y;
}

MainProgram.h

#include <stdio.h>
#include <conio.h>
#include “mylibrary.h”

void main( )
{
 printf(“Sum = %d\n”,GetSum(5,6);
}

#define

#define ชื่อของค่าคงที่ [ค่าที่ต้องการ]

ใช้ในการประกาศค่าคงที่ในโปรแกรม เมื่อประกาศแล้วจะเปลี่ยนแปลงไม่ได้ตลอดโปรแกรม

Example 1

#include <stdio.h>
#define MAX 10

void main()
{
 for (int i=0;i<MAX;i++)
 {
  printf("Hello\n");
 }
}

Example 2

การใช้ define สามารถประมวลผลเล็กๆ น้อยๆ ได้ เช่น

#define DOUBLE(x) x+x
#define SUM(a1,a2) a1+a2
…………..
…………
printf("Double = %d\n",DOUBLE(25));
printf("Sum = %d\n",SUM(25,5));

Example 3

เราสามารถเพิ่มเงื่อนไขในการประกาศค่าคงที่ได้ ดังตัวอย่าง

#define FINDMAX(a,b) (a>b ? a : b)
……………..
printf("Max = %d\n",FINDMAX(1,5));

จากตัวอย่าง เรากำหนดให้รับค่ามา 2 ค่า และตรวจสอบว่า a>b หรือไม่ ถ้าใช่ก็จะให้ค่าที่อยู่หลังจากเครื่องหมาย ? แต่ถ้าไม่ใช่ ก็จะให้ค่า b ออกมา การใช้เครื่องหมาย ? และ : ก็จะเหมือนกับ if และ else นั่นเอง ลองดูอีกตัวอย่างหนึ่ง

#define ISEMPTY(x) (x==0 ? 1 : 0)
…………
int data;
data=0;
if (ISEMPTY(data))
{
 printf("It is empty\n");
}

ผลการรัน
It is empty

หรือจะเขียนแบบนี้ก็ได้ ไม่ว่ากัน

#define ISEMPTY(x) (x==0 ? "YES" : "NO")
………………..
int data=0;
printf("%s\n",ISEMPTY(0));

#undef

#under ชื่อค่าคงที่ที่ต้องการลบ

ใช้ยกเลิกค่าคงที่ ซึ่งถ้าเรายกเลิกแล้ว โปรแกรมอาจจะแปลไม่ผ่าน เพราะหาค่าคงที่นั้นไม่เจอ.. เราจะใช้ในกรณีที่ต้องการเปิดช่องทางให้ผู้พัฒนาโปรแกรมต่อจากเราสามารถปรับแต่งโค้ดของเราได้ยืดหยุ่นมากยิ่งขึ้น

Example

#include <stdio.h>

#define PINE 3.14

void main()
{
 printf("PINE = %f\n",PINE);
#undef PINE
 printf("PINE = %f\n",PINE); 
}

ตัวอย่างนี้ แปลโปรแกรมไม่ได้ ค่าคงที่ PINE ถูกประกาศแล้ว แต่ใน main ไปเขียนยกเลิกค่าคงที่ มันเลยเกิด Error ที่บรรทัดสุดท้ายนั่นเอง

#ifdef, #ifndef, #else, #elif, #endif

#ifdef  x ค่า x ต้องการมีการประกาศเอาไว้หรือไม่
#ifndef x ค่า x ไม่มีการประกาศเอาไว้ใช่หรือไม่
#elif x  ใช้ร่วมกับสองตัวด้านบนในกรณีที่ต้องการตรวจสอบค่าอื่น
#else   ใช้ร่วมกับ #ifdef, #ifndef และ #elif
#endif
  เขียนเอาไว้ตอบจบทุกครั้งที่เรียกใช้ไดเร็กทีฟชุดนี้

ใช้เหมือนกับ if, else, elseif ซึ่งเป็นการตรวจสอบว่าค่าที่ต้องการนั้นมีการประกาศเอาไว้หรือไม่ ลองดูตัวอย่างเพื่อความเข้าใจ

Example 1

#include <stdio.h>

#define PINE 3.14

void main()
{
#ifdef PINE
 printf("Circle area = %f\n",PINE*2.5*2.5);
#else
 printf("Constant PINE doesn't exist\n");
#endif
}

RUN
Circle area = 19.625000

Example 2

#include <stdio.h>

void main()
{
#ifdef PINE
 printf("Circle area = %f\n",PINE*2.5*2.5);
#else
 printf("Constant PINE doesn't exist\n");
#endif
}

RUN
Constant PINE doesn't exist

จากทั้งสองตัวอย่าง ตัวอย่างแรกจะมีการประกาศ PINE เอาไว้ เมื่อมาใน #ifdef ก็จะเช็คว่าค่าคงที่ PINE มีการประกาศเอาไว้หรือไม่ ถ้าใช่ก็ให้เอามาคำนวณหาพื้นที่วงกลม แต่ในตัวอย่างที่ 2 ได้ตัดการประกาศค่า PINE ออกไป ผลการรันโปรแกรมจึงตกลงมาทำที่ #else

 

คุณอาจสนใจ
การทำฟองอากาศ
Lee (125,815 - 17 ก.ค. 49)
การเพิ่มข้อมูลลงในฐานข้อมูล MySQL โดยใช้ Form
Mr.GuruZ (118,630 - 03 มิ.ย. 49)
การจัดข้อความใน Cell แนวนอน
Mr.GuruZ (28,599 - 02 ก.ค. 49)
อยากเอาแท็บ Background ออก
เว็บไทยดีดี (14,902 - 26 ม.ค. 51)
สร้างพื้นหลังกราฟฟิกอย่างงายด้วย Photoshop
langjuko (274,725 - 08 ต.ค. 51)
WinRAR มากกว่าคำว่า..บีบอัดข้อมูล
เว็บไทยดีดี (17,884 - 08 ก.ย. 50)
เลือกใช้สีให้เหมาะกับเว็บเพจของคุณ
เว็บไทยดีดี (14,757 - 27 ต.ค. 50)
การแต่งภาพ ClipArt
หมูขุน (16,309 - 04 ก.พ. 50)