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

 

คุณอาจสนใจ
สร้างข้อความแบบ wave
langjuko (44,808 - 02 ก.ย. 51)
สร้างพื้นหลังกราฟฟิกอย่างงายด้วย Photoshop
langjuko (273,879 - 08 ต.ค. 51)
การสร้าง Form
อ้อม (41,508 - 30 เม.ย. 50)
การส่งผ่าน Arguments
Mr.POP (36,588 - 05 พ.ย. 49)
การ์ตูน Flash อย่างง่ายตอนที่ 1 (การร่างโครงภาพ)
Black-Hawk (153,215 - 18 ม.ค. 51)
ยกเลิก Windows Key (Vista)
เว็บไทยดีดี (16,227 - 10 พ.ค. 51)
การสร้างแบบฟอร์มส่งเมล์
Mr.GuruZ (57,610 - 03 มิ.ย. 49)
การทำตัวอักษร Blur
Mr.GuruZ (78,589 - 04 มิ.ย. 49)