Latest web development tutorials
×

C หลักสูตร

C กวดวิชาภาษา C แนะนำโดยย่อ C การตั้งค่าสภาพแวดล้อม C โครงสร้างหลักสูตร C ไวยากรณ์พื้นฐาน C ชนิดข้อมูล C ตัวแปร C คงที่ C ประเภทการจัดเก็บ C ผู้ประกอบการ C ผู้พิพากษา C การไหลเวียน C ฟังก์ชัน C การกำหนดขอบเขตกฎระเบียบ C แถว C ชี้ C เชือก C โครงสร้าง C สหภาพ C ฟิลด์บิต C typedef C อินพุตและเอาต์พุต C การอ่านออกเขียนเอกสาร C preprocessor C ส่วนหัว C ปลดเปลื้อง C จัดการข้อผิดพลาด C recursion C พารามิเตอร์ตัวแปร C จัดการหน่วยความจำ C บรรทัดคำสั่ง C คลาสสิก 100 ราย

C ห้องสมุดมาตรฐาน

C ห้องสมุดมาตรฐาน - คู่มืออ้างอิง C ห้องสมุดมาตรฐาน - <assert.h> C ห้องสมุดมาตรฐาน - <ctype.h> C ห้องสมุดมาตรฐาน - <errno.h> C ห้องสมุดมาตรฐาน - <float.h> C ห้องสมุดมาตรฐาน - <limits.h> C ห้องสมุดมาตรฐาน - <locale.h> C ห้องสมุดมาตรฐาน - <math.h> C ห้องสมุดมาตรฐาน - <setjmp.h> C ห้องสมุดมาตรฐาน - <signal.h> C ห้องสมุดมาตรฐาน - <stdarg.h> C ห้องสมุดมาตรฐาน - <stddef.h> C ห้องสมุดมาตรฐาน - <stdio.h> C ห้องสมุดมาตรฐาน - <stdlib.h> C ห้องสมุดมาตรฐาน - <string.h> C ห้องสมุดมาตรฐาน - <time.h>

C preprocessor

ส่วนหนึ่งของpreprocessor C ไม่ได้เป็นคอมไพเลอร์ แต่มันเป็นกระบวนการของการรวบรวมขั้นตอนที่แยกต่างหากในระยะสั้น, C preprocessor เป็นเพียงเครื่องมือเปลี่ยนตัวเฉพาะข้อความที่พวกเขาจะสั่งให้รวบรวมเพื่อรวบรวมการปรับสภาพที่สมบูรณ์ก่อนที่จะมีความต้องการที่แท้จริง เราจะ preprocessor C (C Preprocessor) ย่อว่า CPP

คำสั่งซื้อทั้งหมดเป็น pre-โปรเซสเซอร์ที่มีเครื่องหมายปอนด์ (#) ที่จุดเริ่มต้น มันจะต้องเป็นคนแรกที่อักขระที่ไม่ว่างเพื่อเพิ่มประสิทธิภาพในการอ่านคำสั่ง preprocessor ควรเริ่มต้นในคอลัมน์แรก ข้างล่างนี้เป็นทั้งหมดที่สำคัญคำแนะนำก่อนการประมวลผล:

指令描述
#define定义宏
#include包含一个源代码文件
#undef取消已定义的宏
#ifdef如果宏已经定义,则返回真
#ifndef如果宏没有定义,则返回真
#if如果给定条件为真,则编译下面代码
#else#if 的替代方案
#elif如果前面的 #if 给定条件不为真,当前条件为真,则编译下面代码
#endif结束一个 #if……#else 条件编译块
#error当遇到标准错误时,输出错误消息
#pragma使用标准化方法,向编译器发布特殊的命令到编译器中

ตัวอย่างของการประมวลผลก่อน

การวิเคราะห์จะเข้าใจตัวอย่างต่อไปนี้คำแนะนำที่แตกต่างกัน

#define MAX_ARRAY_LENGTH 20

คำสั่งนี้จะบอก CPP เพื่อแทนที่ MAX_ARRAY_LENGTH ทั้งหมด 20 ใช้#defineการกำหนดค่าคงที่เพื่อเพิ่มการอ่าน

#include <stdio.h>
#include "myheader.h"

คำแนะนำเหล่านี้บอก CPP stdio.hได้รับจากระบบห้องสมุดและเพิ่มข้อความไปยังแฟ้มมาในปัจจุบันบรรทัดถัดไปบอก CPPmyheader.h ได้รับจากไดเรกทอรีท้องถิ่นและเพิ่มเนื้อหาไปยังแฟ้มมาในปัจจุบัน

#undef  FILE_SIZE
#define FILE_SIZE 42

คำสั่งนี้จะบอก CPP ยกเลิก FILE_SIZE กำหนดและกำหนดเป็น 42

#ifndef MESSAGE
   #define MESSAGE "You wish!"
#endif

คำสั่งนี้จะบอก CPP เฉพาะเมื่อมีข้อความไม่ได้กำหนดเฉพาะเมื่อกำหนด MESSAGE

#ifdef DEBUG
   /* Your debugging statements here */
#endif

คำสั่งนี้จะบอก CPP หากคุณกำหนด DEBUG แล้วดำเนินการประมวลผลคำสั่ง ที่รวบรวมเวลาถ้าคุณผ่านสวิทช์-DDEBUGเรียบเรียง GCC คำสั่งนี้จะเป็นประโยชน์ มันกำหนด DEBUG คุณสามารถเปิดหรือปิดการแก้จุดบกพร่องในระหว่างการรวบรวม

แมโครที่กำหนดไว้ล่วงหน้า

ANSI C กำหนดจำนวนของแมโคร ในการเขียนโปรแกรมคุณสามารถใช้แมโครเหล่านี้ แต่ที่แตกต่างกันในการปรับเปลี่ยนโดยตรงแมโครที่กำหนดไว้ล่วงหน้าเหล่านี้

描述
__DATE__当前日期,一个以 "MMM DD YYYY" 格式表示的字符常量。
__TIME__当前时间,一个以 "HH:MM:SS" 格式表示的字符常量。
__FILE__这会包含当前文件名,一个字符串常量。
__LINE__这会包含当前行号,一个十进制常量。
__STDC__当编译器以 ANSI 标准编译时,则定义为 1。

ลองตัวอย่างต่อไปนี้:

#include <stdio.h>

main()
{
   printf("File :%s\n", __FILE__ );
   printf("Date :%s\n", __DATE__ );
   printf("Time :%s\n", __TIME__ );
   printf("Line :%d\n", __LINE__ );
   printf("ANSI :%d\n", __STDC__ );

}

เมื่อโค้ดข้างต้น (ในtest.c ไฟล์) เป็นข้อมูลที่รวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:

File :test.c
Date :Jun 2 2012
Time :03:36:24
Line :8
ANSI :1

ผู้ประกอบการ preprocessor

C preprocessor ให้ผู้ประกอบการดังต่อไปนี้จะช่วยให้คุณสร้างแมโคร:

ความต่อเนื่องของผู้ประกอบการมาโคร (\)

แมโครมักจะเขียนในบรรทัดเดียว แต่ถ้าแมโครยาวเกินไปที่จะใส่ในบรรทัดเดียวให้ใช้ความต่อเนื่องของผู้ประกอบการแมโคร (\) ตัวอย่างเช่น:

#define  message_for(a, b)  \
    printf(#a " and " #b ": We love you!\n")

ผู้ประกอบการสตริงตัวอักษรควอน (#)

ในนิยามแมโครเมื่อคุณจำเป็นต้องใส่อาร์กิวเมนต์แมโครเป็นค่าคงที่สตริงสตริงประกอบ quantization คงที่ (#) Macro ใช้ประกอบการที่มีพารามิเตอร์หรือพารามิเตอร์รายการที่เฉพาะเจาะจง ตัวอย่างเช่น:

#include <stdio.h>

#define  message_for(a, b)  \
    printf(#a " and " #b ": We love you!\n")

int main(void)
{
   message_for(Carole, Debra);
   return 0;
}

เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:

Carole and Debra: We love you!
ผู้ประกอบการวางโทเค็น (##)

ผู้ประกอบการวางโทเค็น (##) ตามคำนิยามของแมโครจะผสานสองพารามิเตอร์ จะช่วยให้สองแท็กคำนิยามแมโครอิสระจะรวมกันเป็นแท็ก ตัวอย่างเช่น:

#include <stdio.h>

#define tokenpaster(n) printf ("token" #n " = %d", token##n)

int main(void)
{
   int token34 = 40;
   
   tokenpaster(34);
   return 0;
}

เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:

token34 = 40

นี่คือวิธีที่มันเกิดขึ้นเพราะตัวอย่างนี้จะผลิตผลผลิตที่เกิดขึ้นจริงต่อไปนี้จากคอมไพเลอร์:

printf ("token34 = %d", token34);

ตัวอย่างนี้แสดงให้เห็นถึงสัญญาณ ## n เชื่อมต่อกับ token34ในที่นี่เราใช้สตริงประกอบการคงควอน (#) และผู้ประกอบการวางโทเค็น(##)

ที่กำหนดไว้ () ผู้ประกอบการ

ผู้ประกอบการ preprocessorกำหนดจะใช้ในการแสดงออกคงที่ที่ใช้ในการตรวจสอบว่ามีตัวบ่งชี้ได้ถูกกำหนดให้ใช้ #defineหากระบุที่ระบุถูกกำหนดไว้แล้วค่าที่เป็นจริง (ไม่ใช่ศูนย์) หากระบุที่ระบุไม่ได้ถูกกำหนดค่าเป็นเท็จ (ศูนย์) ตัวอย่างต่อไปนี้แสดงให้เห็นถึงที่กำหนดไว้ () ใช้ประกอบการ:

#include <stdio.h>

#if !defined (MESSAGE)
   #define MESSAGE "You wish!"
#endif

int main(void)
{
   printf("Here is the message: %s\n", MESSAGE);  
   return 0;
}

เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:

Here is the message: You wish!

แมโคร parameterized

CPP เป็นคุณลักษณะที่มีประสิทธิภาพสามารถนำมาใช้ในการจำลองการทำงานของแมโครแปร ตัวอย่างเช่นรหัสต่อไปนี้คือการคำนวณตารางของตัวเลข:

int square(int x) {
   return x * x;
}

เราสามารถใช้แมโครเพื่อเขียนโค้ดข้างต้นดังต่อไปนี้:

#define square(x) ((x) * (x))

ก่อนที่จะใช้แมโครกับพารามิเตอร์ที่คุณต้องใช้คำสั่ง #defineรายการพารามิเตอร์ในวงเล็บและต้องเป็นทันทีหลังชื่อแมโคร ช่องว่างระหว่างชื่อมหภาคและวงเล็บไม่ได้รับอนุญาต ตัวอย่างเช่น:

#include <stdio.h>

#define MAX(x,y) ((x) > (y) ? (x) : (y))

int main(void)
{
   printf("Max between 20 and 10 is %d\n", MAX(10, 20));  
   return 0;
}

เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:

Max between 20 and 10 is 20