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 


Comments