PDA

View Full Version : داستان این __ ها که اول یه سری چیز ها مینویسن چیه؟



mohsen.hex
سه شنبه 08 آذر 1390, 20:09 عصر
سوال که تو عنوان بود

مثلا

#ifdef __cplusplus
extern "C"
{
#endif

خوب یه سوال دیگه اصلا این چهار خط کد چکار میکنه؟

_hamid
سه شنبه 08 آذر 1390, 20:44 عصر
این توی استاندارد c++ هست که یک متغییر مانندی مثل همین __cplusplus تعریف کنن تا برنامه نویسی طبق اون برای برنامه ای که می نویسی اقدام کنه.
در اصل اون آندرلاین هاهدفشون این بوده که این متغییر با متغییر های دیگه قاطی نشه.

mohsen.hex
سه شنبه 08 آذر 1390, 21:10 عصر
چه لزومی داره از این کد استفاده بشه ؟
مگه c++ کاملتر از سی نیست پس چرا بیایم بگیم این رو سی ببین؟

_hamid
سه شنبه 08 آذر 1390, 22:06 عصر
چرا ولی خوب بعضی جاها هم حتی سی پلاس پلاس اونقدرا کاربردی نیست. مثل کرنل نویسی و خیلی سطح پایین(بعد از اسمبلی) کار کردن بهترین گزینه سی هست.
و یه ذره سیستم سی و سی پلاس پلاس با هم فرق داره. تا اونجایی که من می دونم این کار دلیل اصلیش بخاطر name mangling تو C++ هست.
(اگر خیلی نمی خوای درگیرش بشی فعلا name mangling رو ول کن :دی این بحث طراحی خود زبانه )

حتی بعضی وقتا شما نیاز داری یه چیز(حالا هرچی)‌سی پلاس پلاسی توی کد C ای که داری می نویسی بیاری! که باز هم از همین روش استفاده می کنی.

mohsen.hex
سه شنبه 08 آذر 1390, 22:26 عصر
خوی حالا از این بحث گذشته
__cplusplus
این حرف شاید هم متغیر شایدم هرچی دستوره ؟ مقدار داره؟ یا
حقیقتش من دارم با میکرو کنترلر ارم کار میکنم و به این دستورات بر خوردم مثلا
__BUILD_WITH_EXAMPLE__
حالا این چیه مقدار داره یا ...

_hamid
سه شنبه 08 آذر 1390, 23:11 عصر
__cplusplus وقتی از کامپایلر C++ استفاده کنی آره یه مقدار داره معمولا 1 ولی اگر کامپایلرت سی باشه یعنی اصلا داری سی کد می زنی خیر مقدار نداره یعنی اصلا تعریف نمی شه ( تعریفش هم اینجوریه:‌
#define __cplusplus 1

به اون #ifdef دقت کن! نوشته اگر __cplusplus ست شده بود برای این کد ها را رو (هم) کامپایل کن اگر نه از روش می پره :)
این __cplusplus یک استاندارد تو این زبونه. و دلیلش معلومه. اما اون دومی رو دیگه خود کد زننده عالمه.

mohsen.hex
چهارشنبه 09 آذر 1390, 08:11 صبح
عجب
خوب حالا این __cplusplus کجا مقدار دهی میشه؟
اخه من هرچی نگاه کردم ندیدم!
اگه جدول خاصی هم دارن ممنون میشم بدین بهم!

_hamid
چهارشنبه 09 آذر 1390, 19:24 عصر
گفتم که رفیق :) جایی نیست که ببنیش اما می تونی با cout از محتواش خبردار بشی :)
یعنی خود کامپایلر اینارو تعیین می کنه.
مثلا توی ویژوال استودیو اینها
http://msdn.microsoft.com/en-us/library/b0084kay.aspx
و توی جی سی سی اینها
http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html