رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران
کامبیز اسدزاده

رفع مشکل مقدار بازگشتی ماکروی cplusplus__

پست های پیشنهاد شده

سلام، مدتی بود که نسخه‌ی ۲۰۱۷ کامپایلر MSVC با مشکل عدم بازگشت مقدار صحیح از نسخه‌ی استاندارد زبان مواجه بود. هرچند توسط توسعه دهندگان این مشکل به مایکروسافت گزارش داده شده بود اما ظاهراً مشکل همچنان پا برجاست.

و اما مشکل، کد زیر را با کامپایلر MSVC2017 اجرا کنید:

#include <iostream>

int main()
{
	std::cout << __cplusplus << std::endl;
	std::cin.get();
	return 0;
}

اگر دقت کنید مقدار بازگشتی این کد 199711خواهد بود. در حالی که باید  مقدار بازگشتی آن با توجه به استاندارد زبان باید یکی از دو مقدار 201402L یا 201403 باشد. برای حل این مورد من پچی را فراهم کردم که می‌تونید این مشکل رو حل کنید. علاوه بر این یک سری ماکرو نویسی جزئی انجام شده که با دقت بیشتر و مقدار بازگشتی از نام خود کامپایلر را برای شما ارائه دهد.

طبق اصلاحیه کد دستوری آن به صورت زیر خواهد که تکه‌ای از کد‌های یکی از پروژه‌های من به نام Genesis بود که حالا اینجا به اشتراک گذاشتمش:

#include <iostream>

using namespace std;

#include "macro.h"

int main()
{
    Macro mc;
    cout << "Hello World!" << endl;
    cout << "C++ Standard Version (MSVC) : " << __cplusplus << endl;
    cout << "C++ Standard Version (with bug fix in MSVC : " << __GENESIS_CPP_VALUE__ << endl;
    cout << "C++ Standard Version (with bug fix in MSVC using function: " << mc.get__cplusplus(false) << endl;
    cout << "Compiler name using flag true: " << mc.get__cplusplus(true) << endl;
    return 0;
}

خروجی:

Hello World!
C++ Standard Version (MSVC) : 199711
C++ Standard Version (with bug fix in MSVC : 201703
C++ Standard Version (with bug fix in MSVC using function: 201703
Compiler name using flag true: MSVC++

برای دریافت این اصلاحیه به مخزن آن مراجعه نمایید.

  • پسندیدن 2

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری

  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

  • مطالب مشابه

×