زبان برنامه نویسی سی/تبدیل و جایگزینی داده‌ها: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
جزبدون خلاصۀ ویرایش
بدون خلاصۀ ویرایش
خط ۲۴۱:
==typedef==
 
کلیدواژه '''typedef''' برای تعیین یک یا چند شناسه برای نمایندگی جهت اعلان و تعریف یک نوع داده که خود می‌توانندمی‌تواند از کلیدواژه‌هایی تشکیل شده باشندباشد استفاده می‌شود . ضمن اینکه شما می‌توانید هر چند بار که خواستید برای یک یا چند نوع داده ، جایگزین تعریف کنید. مثلاً شما می‌توانید به جای اعلان و یا تعریف یک نوع داده صحیح ، به جای کلیدواژه int ، یک شناسه را به اسم integer بسازید و از آن جهت اعلان و تعریف داده‌های صحیح استفاده کنید . دقت کنید که با این کار کلیدواژه int منسوخ نمی‌شود ( یعنی همچنان می‌توانید در برنامه از کلیدواژه int برای اعلان و تعریف داده‌های عددی صحیح خود استفاده کنید ) . شکل کلی ایجاد جایگزین‌ها برای انوع داده توسط typedef به شکل زیر است :
 
<code>'''typedef''' ''data-type'' ''new-name''</code>
 
از typedef برای خواناتر شدن کدهای نوشته شده استفاده می‌شود که این خواناتر شدن در دو محور معنی می‌یابد : ۱− کوتاه‌تر نوشته می‌شود ۲− به کدهای نوشته شده معنای قابل درکی می‌بخشد
 
مثال :
سطر ۲۸۲ ⟵ ۲۸۴:
 
در مثال بالا دو جایگزین برای تعریف unsigned char تعیین نموده ایم و با کمک یکی از آنها یعنی little_number کاراکتر بدون علامت i را تعریف کرده و با کمک دیگری یعنی pixel_vlaue متغیر کاراکتری بدون علامت red را تعریف نموده و سپس هر دو را در خروجی خط‌دستوری چاپ کرده‌ایم
 
'''دقت کنید :''' ۱ − در سیستم‌هایی که مبتنی بر استاندارد پازیکس POSIX نوشته می‌شوند که شامل همه سیستم عامل‌های مبتنی بر یونیکس یا شبه‌یونیکس‌ها می‌شود پسوند t_ در کتابخانه‌ها برای بسیاری از پردازش‌ها ، داده‌ها و تابع‌ها از پیش تعریف شده است ؛ بنابراین مؤکداً توصیه می‌کنیم که اگر می‌خواهید شناسه جایگزینی بسازید ، درست مثل شناسه‌های دیگر که پیش‌تر نیز گفتیم از اسامی‌ای که t_ را در نام خود دارند ، استفاده نکنید و از آنها پرهیز کنید ، چرا که بسیاری از خطاها در برنامه‌نویسی در سیستم‌های سازگار با پازیکس به همین خاطر رخ می‌دهند ۲ − typedef و شناسه‌هایی که ایجاد کرده‌اید مشمول قانون حوزه دید در زبان C می‌شوند ( بنابراین شناسه‌ای که با typedef داخل یک بلوک تعریف شده ، داخل بلوکی دیگر قابل استفاده نیست و از دید آن بلوک پنهان می‌ماند )
 
مثال :
 
{{چپ‌چین}}
<source lang="C#">
#include<stdio.h>
typedef unsigned char uchar;
void foo(void);
 
int main()
{
uchar ch = 'a';
printf("ch inside main() : %c\n", ch);
foo();
return 0;
}
void foo(void)
{
uchar ch = 'z';
printf("ch inside foo() : %c\n", ch);
}
</source>
{{پایان چپ‌چین}}
 
در مثال بالا شناسه uchar در تابع mian مقدار a را دارد و در تابع foo مقدار z را . ابتدا یک شناسه جایگزین با نام uchar برای یک نوع داده کاراکتری بدون علامت تعریف کردیم که سراسری است . سپس داخل تابع main مقدار و موجودی a را در داخل کاراکتر بدون علامت ch که با کمک شناسه جایگزین uchar تعریف شده است قرار دادیم و سپس در بلوک تابع foo بار دیگر کاراکتر بدون علامت ch را تعریف نمودیم ( باز هم با استفاده از شناسه جایگزین uchar ) که مقدار و موجودی z را داخل آن قرار دادیم . در هر دو تابع مقدار ch را با کمک تابع کتابخانه‌ای printf در خروجی خط دستوری چاپ نموده‌ایم
 
ما در زبان C مجاز هستیم تا اشاره‌گرها را نیز با کمک typedef تعریف و جایگزین نمائیم مثلاً typedef int* iptr شناسه iptr را به عنوان اعلان کننده اشاره‌گری از نوع صحیح تعریف می‌کند . بنابراین با الگوی نوشته شده اگر در داخل برنامه خود بنویسیم : iptr *a شناسه a اشاره‌گر به اشاره‌گری از نوع صحیح خواهد بود و iptr b[10] شناسه b را به عنوان آرایه ۱۰ عنصری از اشاره‌گر از نوع صحیح تعریف می‌کند
 
[[رده:زبان برنامه نویسی سی]]