Pre-processor directive

Download Report

Transcript Pre-processor directive

บทที่ 13 PRE-PROCESSOR DIRECTIVE
& MACRO
KAIROEK CHOEYCHUEN
Pre-processor directive & Macro คืออะไร
-คำสัง่ ที่ประกำศไว้ ด้ำนบนสุด
-คอมไพเลอร์ จะกระทำ Pre-processor & Macro
ก่อนจะประมวลผลโปรแกรม
- สำมำรถเป็ น ค่ำคงที่, ฟั งก์ชนั หรื อกำรตรวจสอบ
เงื่อนไข (คล้ ำย คำสัง่ if)
ตารางสรุ ปPre-processor directive
Pre-processor directive
#include
#if
#ifdef
#ifndef
#elif
คำอธิ บำย
แทรกไฟล์ทตี่ ้องการประมวลผลร่วมกับโปรแกรม
ใช้ตรวจสอบเงือ่ นไขก่อนการประมวลผลโปรแกรม
ใช้ตรวจสอบ Macro ทีถ่ ูกสร้างโดย #define
ใช้ตรวจสอบว่า Macro ไม่ถูกประกาศใช่ไหม
#else
หากตรวจสอบเงือ่ นไข #if, #ifdef , #ifndef และ
#elif แล้วเป็ นเท็จ ก็จะมาตรวจสอบ เงือ่ นไขที่ #else
#endif
#define
#undef
ใช้ระบุจุดสิน้ สุดของเงือ่ นไข
ใช้สร้าง Macro
ใช้ยกเลิก Macro
หากตรวจสอบเงือ่ นไข #if, #ifdef และ #ifndef แล้วเป็ น
เท็จ ก็จะมาตรวจสอบ เงือ่ นไขที่ #elif
Macro
อำจเป็ น ค่ำคงที่, ฟังก์ชัน
มำโครมำตรฐำน
(Standard predefined
macro)
มำโครที่ผูใ้ ช้กำหนดเอง
(User predefined
macro)
มาโครมาตรฐาน
- มำโครที่ภำษำซี จัดไว้ ให้ ผ้ ใู ช้ เรี ยกใช้ งำนได้ ทนั ที
- ชื่อมำโครมำตรฐำน จะขึ ้นต้ นและปิ ดท้ ำยด้ วย __ (underscore 2 ตัวติดกัน)
มำโครมำตรฐำน
คำอธิ บำย
__FILE__
__LINE__
__DATE__
__TIME__
ดึงชือ่ ไฟล์ทเี่ รากาลังเขียนโปรแกรม
ดึงหมายเลขบรรทัดทีเ่ รากาลังทางานอยู่
ดึงวันทีเ่ ราเริม่ รัน Pre-processor ในรูปแบบสตริง 11 ตัวอักษร
ดึงเวลาทีเ่ ราเริม่ รัน Pre-processor ในรูปแบบสตริง 8 ตัวอักษร
__STDC__
ใช้ตรวจสอบว่า c compiler ทีใ่ ช้เป็ นไปตามมาตรฐาน ISO/ANSI C
หรือไม่ ถ้าเป็ นจะส่งค่า 1 ถ้าไม่เป็ นจะส่งค่า 0 ออกมา
ตัวอย่ างการใช้ งาน Standard Predefined Macros
เรียกใช้ Macro เป็ นกำรแทรก
คำสั่งที่สร้ำงไว้ ที่ตำแหน่งนี้
สร้ำง
Macro
ก่ อนรันคาสั่งใน main คาสั่งในส่ วน Pre-processor directive จะ
ไปแทนที่ ในตาแหน่ งที่เรียนใช้ Pre-processor
Macro ที่ผ้ ูใช้ กาหนดเอง ด้ วยคาสั่ง #define
รู ปแบบ
#define ชื่อMacro ค่ าที่ต้องการกาหนดให้ Macro
ตัวอย่ าง Macro อย่ างง่ าย
#define PI 3.14
//สร้ ำงค่ำคงที่ PI = 3.14
#define TIMES 2
//สร้ ำงค่ำคงที่ TIMES = 2
#define ROUND 3*TIMES //สร้ ำงค่ำคงที่กำรคำนวณ
//ROUND = 3* TIMES = 3*2=6
#define ADD 2+1+a
//สร้ ำงค่ำคงที่กำรคำนวณ
//ADD = 2+1+ตัวแปร a
Macro ที่สามารถรั บพารามิเตอร์ ได้
รู ปแบบ
#define ชื่อMacro(อาร์ กวิ เมนต์ ) ฟั งก์ ชันของอาร์ กวิ เมนต์
ตัวอย่ าง Macro ที่สามารถรั บค่ าพารามิเตอร์ ได้
#define SQUARE(A) (A*A) //สร้ ำงฟั งก์ชนั A ยกกำลังสอง
#define ADD(B) (B+B)
//สร้ ำงฟั งก์ชนั B+B
Macro แบบมีเงื่อนไข
รู ปแบบ
#define ชื่อMacro(arg1,arg2,…,arg n) เงื่อนไข
ตัวอย่ าง Macro แบบมีเงื่อนไข
#define MAX(x,y) x>y ? x : y //สร้ ำงฟั งก์ชนั หำค่ำสูงสุด
//ระหว่ำง x, y
การใช้ If อย่ างย่ อ แบบเต็มแสดงได้ ดังนี ้
If (x>y)
MAX = x
Else
MAX = y
Macro แบบมีเงื่อนไข (หลายบรรทัด)
รู ปแบบ
#define ชื่อMacro(arg1,arg2,…,arg n) {
\
คำสัง่ 1;
\
คำสัง่ 2;
\
….
\
คำสัง่ n;}
ตัวอย่ าง Macro แบบมีเงื่อนไข (หลายบรรทัด)
ตัวอย่ างการใช้ #ifdef, #ifndef, #else, #endif, #undef
ตรวจสอบ A ถูก define ?
เปลี่ยนค่ำ A ต้องทำกำร
#undef A ก่อนเสมอ
ทำงเลือกสุดท้ำยเมือ่
เงื่อนไขก่อนหน้ำเป็ นเท็จ
สิ้นสุดกำรตรวจสอบ
เงื่อนไข
หลังจำกรัน Pre-processor directive
ตัวอย่ างการใช้ #ifdef, #ifndef, #else, #endif, #undef
แทรกไฟล์ font1.inc ไว้ในส่วน
Pre-processor directive
แทรกไฟล์ font2.inc ไว้ในส่วน
Pre-processor directive
ตัวอย่ างการใช้ #ifdef, #ifndef, #else, #endif, #undef
เรียกใช้ฟังก์ชันที่อยู่ในไฟล์
font1.inc (ไฟล์ที่จะแทรก
อำจมีนำมสกุลอื่ นๆ เรำสำมำรถ
ตั้งนำมสกุลเองได้ตำมใจ)
เรียกใช้ฟังก์ชันที่อยู่ในไฟล์
font2.inc