Latest web development tutorials

C المعالج

جزء منC المعالج ليس هو المترجم، وإنما هو عملية تجميع خطوة منفصلة.باختصار، C المعالج هو مجرد أداة استبدال النص فقط، وسوف تكليف مترجم لتجميع المعالجة كاملة قبل الحاجة الفعلية. وسوف C المعالج (C قبل المعالج) اختصارا باسم حزب الشعب الكمبودي.

جميع أوامر ما قبل المعالج مع الجنيه (#) في البداية. يجب أن يكون أول حرف غير فارغة، من أجل تعزيز القراءة، يجب أن توجيهات المعالج يبدأ في العمود الأول. المدرجة أدناه هي كل تعليمات هامة قبل المعالج:

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

أمثلة من قبل المعالج

تحليل لفهم الأمثلة التالية تعليمات مختلفة.

#define MAX_ARRAY_LENGTH 20

هذا التوجيه يقول حزب الشعب الكمبودي ليحل محل كل MAX_ARRAY_LENGTH 20. استخدام# تعريفلتعريف الثوابت لتعزيز سهولة القراءة.

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

هذه التعليمات تروي CPP stdio.h الحصول عليها منمكتبة النظام، وإضافة نص إلى ملف مصدر في الوقت الراهن.السطر التالي يقول حزب الشعب الكمبوديmyheader.h الحصول عليها من الدليل المحلي وإضافة محتوى إلى ملف مصدر في الوقت الراهن.

#undef  FILE_SIZE
#define FILE_SIZE 42

يروي هذا الأمر CPP إلغاء FILE_SIZE محددة، وتحديد ذلك إلى 42.

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

يروي هذا الأمر CPP فقط عندما غير معرف الرسالة فقط عندما تعرف الرسالة.

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

يروي هذا الأمر CPP إذا قمت بتعريف التصحيح، ثم تنفيذ بيان المعالجة. في وقت الترجمة، إذا قمت بتمرير التبديل-DDEBUGإلى مترجم دول مجلس التعاون الخليجي، وهذا الأمر مفيدا. ويعرف التصحيح، يمكنك تشغيل دائما أو إيقاف التصحيح أثناء الترجمة.

وحدات الماكرو مسبقا

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

مشغل المعالج

يوفر C المعالج العوامل التالية لمساعدتك في إنشاء ماكرو:

استمرار المشغل الكلي (\)

عادة ما تكون مكتوبة ماكرو في سطر واحد. ومع ذلك، إذا كان الماكرو طويل جدا لاحتوائه في خط واحد، استخدم استمرار المشغل الكلي (\). على سبيل المثال:

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

مشغل سلسلة حرفية تكميم (#)

في تعريفات الماكرو، عندما كنت في حاجة لوضع حجة الكلي إلى سلسلة ثابتة، سلسلة المستمر مشغل تكميم (#). ماكرو باستخدام المشغل لديه معلمة أو معلمة قائمة محددة. على سبيل المثال:

#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);

يوضح هذا المثال رمز ## ن يتصل token34 هنا، استخدمناسلسلة المستمر مشغل تكميم (#)، ومشغل لصق رمزي (##).

تعريف المشغل ()

يستخدم مشغل المعالجمحددة في التعبير المستمر المستخدمة لتحديد ما إذا كان قد تم تعريف المعرف باستخدام رقم تعريف.إذا تم تعريف المعرف المحدد من قبل، فإن القيمة الحقيقية (غير الصفر). إذا لم يتم تعريف المعرف المحدد، القيمة false (صفر). يوضح المثال التالي تعريف () استخدام المشغل:

#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!

ماكرو معلمات

حزب الشعب الكمبودي هي ميزة قوية يمكن استخدامها لمحاكاة وظيفة الكلى معلمات. على سبيل المثال، التعليمة البرمجية التالية هو لحساب مربع عدد:

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

يمكننا استخدام ماكرو لإعادة كتابة التعليمات البرمجية أعلاه، على النحو التالي:

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

قبل استخدام وحدات الماكرو مع المعلمات،يجب عليك استخدام التوجيه # تعريف.ومرفق طيه قائمة المعلمات بين قوسين، ويجب أن تكون مباشرة وراء اسم الماكرو. لا يسمح مسافة بين اسم الماكرو والقوس نقاط. على سبيل المثال:

#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