วันที่โพสต์: Feb 15, 2011 8:45:43 AM
CodeVisionAVR C Complier ตอนที่ 1
ในตอนนี้ เราจะมาเริ่มเข้าเนื้อหากฏทั่วๆ ไปของการเขียนภาษาซี กับ CodeVisionAVR C Complier โดยเน้นเฉพาะที่ต้องใช้กับ Complier ซึ่งเราอาจจะไม่ได้ลงไปในรายละเอียดทุกๆ ส่วนของภาษาซี แต่จะเน้นเฉพาะที่ต้องใช้บ่อยๆ ในการทำงานกับไมโครคอนโทรลเลอร์เท่านั้น ซึ่งรายละเอียดทั้งหมดของภาษาซี เพื่อนๆสามารถหาอ่านได้ตามหนังสือภาษาซี ที่มีขายอยู่ทั่วไป
The C Preprocessor
The C Preprocessor directives ยอมอนุญาต ให้คุณกระทำการได้ดังนี้
นำไฟล์อื่นเข้ามาร่วมในการคอมไพล์ได้ โดยไฟล์นั้น อาจจะเป็นไฟล์ไลบรารี หรือ ไฟล์ที่ประกาศเฉพาะแต่ function prtotype ก็ได้
ยอมให้เรานิยามตัวแปร Macro ซึ่งช่วยลดความยุ่งยากในการเขียนโปรแกรมมิ่ง และช่วยทำให้ไล่โค๊ดได้ง่าย
ช่วยให้การตั้งค่าการ Debug และช่วยปรับปรุงโค๊ดให้มีความสามารถโยกย้ายไป complier ค่ายอื่นๆได้ง่าย
สามารถระบุ complier ที่ใช้ในการคอมไพล์ได้
โดย Preprocessor จะประกาศไว้ก่อน function main(void) ทุกครั้ง Preprocessor ที่สำคัญได้แก่
#include ทำหน้าที่รวมไฟล์อื่นๆ เข้ามาในไฟล์ซอร์สโค๊ดของคุณ เราสามารถรวมไฟล์ด้วยคำสั่ง #include ได้มากที่สุด 300 ไฟล์
รูปแบบการใช้งาน
#include <file_name> ไฟล์ที่ถูกเรียกเข้ามาร่วมด้วยนี้ จะต้องอยู่ภายในโฟลเดอร์ include directory ของ complier
หรือรูปแบบนี้
#include "file_name" ไฟล์ที่ถูกเรียกเข้ามาร่วมด้วยนี้ จะต้องอยู่ภายในโฟลเดอร์เดียวกันกับไฟล์ซอร์สโค๊ด
#define ใช้สำหรับในการกำหนด macro ( macro คือคำสั่งที่ผู้ใช้เขียนขึ้นเอง หรือคำสั่งที่ประกอบด้วยคำสั่งย่อยๆ คำสั่งซึ่งแทนด้วยสัญลักษณ์ เพียงสัญลักษณ์เดียว ) ตัวอย่างเช่น
#define ALFA 0xff เป็นการแทน ALFA ด้วยค่าเลขฐาน 0xff
บางครั้งเราสามารถที่จะให้ parameter กับตัวมาโคร ได้ด้วย เช่น
#define SUM(a,b) a+b
int i = SUM(2,3); เราจะได้ค่า i = 5
ถ้ามีการใช้ # ร่วมกับ parameter ของมาโคร จะเป็นแปลง parameter ของมาโคร ให้กลายเป็น ตัวอักษร
#define PRINT_MESSAGE(t) printf(#t)
เมื่อเราเรียกใช้คำสั่ง PRINT_MESSAGE(Hello) เราจะได้ผลลัพธ์เหมือนกับ printf("Hello");
เราสามารถทำการต่อเชื่อมตัว parameter 2 ตัวของมาโครได้ โดยใช้สัญลักษณ์ ## สองตัวติดกัน ดังตัวอย่าง
#define ALFA(a,b) a##b
char ALFA(x,y) = 1; เราจะได้ผลลัพธ์เหมือนกับ char xy = 1;
หากว่ามาโครของเรามีจำนวนบรรทัดมากกว่า 1 บรรทัด เราสามารถขึ้นบรรทัดใหม่ได้ โดยการใช้ \ ก่อนจบบรรทัดเก่า
เราสามารถยกเลิกการใช้มาโครได้ด้วยใช้คำสั่ง #undef ALFA เป็นการยกเลิกมาโคร ALFA