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++ วันที่และเวลา C++ เอาท์พุทหรือ Basic Input C++ โครงสร้างข้อมูล

C++ เชิงวัตถุ

C++ คลาสและวัตถุ C++ สืบทอด C++ ผู้ประกอบการมากเกินไปและการทำงานมากเกินไป C++ polymorphism C++ ข้อมูลที่เป็นนามธรรม C++ ข้อมูล encapsulation C++ อินเตอร์เฟซ(ระดับนามธรรม)

C++ การสอนที่ทันสมัย

C++ แฟ้มและสตรีม C++ การจัดการข้อยกเว้น C++ หน่วยความจำแบบไดนามิก C++ namespaces C++ แบบ C++ preprocessor C++ การประมวลผลสัญญาณ C++ multithreading C++ Web โครงการ

C++ กรุ

C++ STL หลักสูตร C++ ห้องสมุดมาตรฐาน C++ ทรัพยากรที่มีประโยชน์

c ++ preprocessor

บางคนสั่ง preprocessor ชี้นำ preprocessor เพื่อคอมไพเลอร์ก่อนที่จะรวบรวมจริงที่คุณต้องดำเนินการ

ทุกคำสั่ง preprocessor คือ (#) เริ่มต้นด้วยเครื่องหมายปอนด์เท่านั้นอักขระช่องว่างอาจจะปรากฏก่อนสั่งพรีโพรเซสเซอร์ c ++ สั่ง preprocessor ไม่ได้เป็นคำสั่งเพื่อให้พวกเขาไม่ได้อัฒภาคที่สิ้นสุด ()

เราได้เห็นทุกกรณีก่อนหน้านี้มีคำสั่ง#includeแมโครนี้จะใช้ไฟล์ส่วนหัวจะรวมอยู่ในแฟ้มแหล่งที่มา

c ++ นอกจากนี้ยังสนับสนุนจำนวนสั่งประมวลผลเบื้องต้นเช่น # include # กำหนด # ถ้า # อื่น # บรรทัด ฯลฯ ให้เราดูที่คำแนะนำที่สำคัญเหล่านี้

preprocessing #define

#define preprocessor สั่งใช้ในการสร้างค่าคงที่สัญลักษณ์คงสัญลักษณ์มักจะเรียกว่าแมโครรูปแบบของคำสั่งทั่วไปคือ

#define macro-name replacement-text 

เมื่อบรรทัดของรหัสนี้ปรากฏขึ้นในไฟล์ไฟล์ที่ปรากฏในภายหลังแมโครทั้งหมดจะถูกแทนที่ด้วยการเปลี่ยนข้อความก่อนที่โปรแกรมจะรวบรวม ตัวอย่างเช่น:

#include <iostream>
using namespace std;

#define PI 3.14159

int main ()
{
 
    cout << "Value of PI :" << PI << endl; 

    return 0;
}

ตอนนี้ขอทดสอบรหัสนี้จะดูที่ผลของการปรับสภาพได้ สมมติว่าแฟ้มแหล่งที่มาที่มีอยู่แล้วให้ใช้ตัวเลือก -E ในการรวบรวมและการเปลี่ยนเส้นทางผลให้ test.p. ตอนนี้ถ้าคุณดูไฟล์ test.p คุณจะเห็นว่ามันมีอยู่แล้วมีข้อมูลจำนวนมากและความคุ้มค่าการเปลี่ยนแปลงในด้านล่างของไฟล์ดังต่อไปนี้:

$gcc -E test.cpp > test.p

...
int main ()
{
 
    cout << "Value of PI :" << 3.14159 << endl; 

    return 0;
}

ฟังก์ชั่นมาโคร

คุณสามารถใช้ #define เพื่อกำหนดแมโครดังต่อไปนี้ด้วยพารามิเตอร์:

#include <iostream>
using namespace std;

#define MIN(a,b) (((a)<(b)) ? a : b)

int main ()
{
   int i, j;
   i = 100;
   j = 30;
   cout <<"The minimum is " << MIN(i, j) << endl;

    return 0;
}

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

The minimum is 30

รวบรวมเงื่อนไข

มีหลายคำสั่งที่สามารถใช้ในการคัดเลือกในส่วนของรหัสที่มาโปรแกรมจะรวบรวมเป็น กระบวนการนี้เป็นที่รู้จักกันรวบรวมเงื่อนไข

โครงสร้างและการเลือกหากเงื่อนไขโครงสร้างเหมือนพรีโพรเซสเซอร์ พิจารณารหัสทาง preprocessor ต่อไปนี้:

#ifndef NULL
   #define NULL 0
#endif

คุณสามารถทำเฉพาะเมื่อรวบรวมกับการแก้จุดบกพร่องแก้จุดบกพร่องที่สามารถรับรู้การใช้แมโครดังต่อไปนี้:

#ifdef DEBUG
   cerr <<"Variable x = " << x << endl;
#endif

ถ้าก่อนหน้านี้การเรียนการสอน #ifdef ดีบักได้รับการกำหนดสัญลักษณ์คง DEBUG มันจะอยู่ในงบโปรแกรมcerr ที่รวบรวมคุณสามารถใช้ #if 0 ความคิดเห็นจากส่วนคำสั่งของโปรแกรมดังต่อไปนี้:

#if 0
   不进行编译的代码
#endif

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

#include <iostream>
using namespace std;
#define DEBUG

#define MIN(a,b) (((a)<(b)) ? a : b)

int main ()
{
   int i, j;
   i = 100;
   j = 30;
#ifdef DEBUG
   cerr <<"Trace: Inside main function" << endl;
#endif

#if 0
   /* 这是注释部分 */
   cout << MKSTR(HELLO C++) << endl;
#endif

   cout <<"The minimum is " << MIN(i, j) << endl;

#ifdef DEBUG
   cerr <<"Trace: Coming out of main function" << endl;
#endif
    return 0;
}

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

Trace: Inside main function
The minimum is 30
Trace: Coming out of main function

# ## และผู้ประกอบการ

# ## และผู้ประกอบการประมวลผลเบื้องต้นใน C ++ และ ANSI / ISO ซีในก็สามารถใช้ได้ # Operator โทเค็นการเปลี่ยนข้อความจะถูกแปลงเป็นสตริงในเครื่องหมายอัญประกาศ

พิจารณาคำนิยามแมโครต่อไปนี้:

#include <iostream>
using namespace std;

#define MKSTR( x ) #x

int main ()
{
    cout << MKSTR(HELLO C++) << endl;

    return 0;
}

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

HELLO C++

ลองมาดูวิธีการทำงาน ทุ่มเท, C ++ preprocessor บรรทัดต่อไปนี้:

cout << MKSTR(HELLO C++) << endl;

แปลงเป็น:

cout << "HELLO C++" << endl;

## ผู้ประกอบการที่ใช้ในการเชื่อมต่อสองราชสกุล นี่คือตัวอย่าง:

#define CONCAT( x, y )  x ## y

เมื่อ CONCAT ปรากฏในโปรแกรมพารามิเตอร์จะถูกเชื่อมโยงและใช้เพื่อแทนที่แมโคร ตัวอย่างเช่นโปรแกรม CONCAT (สวัสดี, C ++) จะถูกแทนที่ด้วย "Hello c ++" ดังแสดงในตัวอย่างต่อไปนี้

#include <iostream>
using namespace std;

#define concat(a, b) a ## b
int main()
{
   int xy = 100;
   
   cout << concat(x, y);
   return 0;
}

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

100

ลองมาดูวิธีการทำงาน ทุ่มเท, C ++ preprocessor บรรทัดต่อไปนี้:

cout << concat(x, y);

แปลงเป็น:

cout << xy;

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

c ++ ที่ระบุไว้ในตารางด้านล่างแมโครที่กำหนดไว้ล่วงหน้าบางส่วน:

描述
__LINE__ 这会在程序编译时包含当前行号。
__FILE__ 这会在程序编译时包含当前文件名。
__DATE__ 这会包含一个形式为 month/day/year 的字符串,它表示把源文件转换为目标代码的日期。
__TIME__ 这会包含一个形式为 hour:minute:second 的字符串,它表示程序被编译的时间。

ให้เราดูที่เหล่านี้ตัวอย่างแมโคร:

#include <iostream>
using namespace std;

int main ()
{
    cout << "Value of __LINE__ : " << __LINE__ << endl;
    cout << "Value of __FILE__ : " << __FILE__ << endl;
    cout << "Value of __DATE__ : " << __DATE__ << endl;
    cout << "Value of __TIME__ : " << __TIME__ << endl;

    return 0;
}

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

Value of __LINE__ : 6
Value of __FILE__ : test.cpp
Value of __DATE__ : Feb 28 2011
Value of __TIME__ : 18:52:48