کامبیز اسدزاده 622 ارسال شده در شهریور 98 معمولاً در سیپلاسپلاس برای چاپ اطلاعات مربوط به کد منبع از ماکروها استفاده میشود. ماکروها به عنوان یکی از ویژگیهای بسیار قدرتمند زبان C محسوب میشوند که در C++ نیز از آنها پشتیبانی میشود. برای مثال ماکروهای __LINE__ و __FILE__ اطلاعات مربوط به شماره خط، فایل و نام آن را بر میگردانند. در استاندارد جدید یعنی 2a یا همان نسخهٔ ۲۰ زبان، کلاس source_location معرفی شده است که در فایل سرآیند <source_location> تعبیه شده است. با دسترسی به فیلدهای line، column، filename و function_name میتوان تحت این کلاس مشخصات مورد نیاز را از کد منبع چاپ کرد. مثال : #include <iostream> #include <string_view> #include <source_location> void log(std::string_view message, const std::source_location& location = std::source_location::current()) { std::cout << "info:" << location.file_name() << ":" << location.line() << " " << message << '\n'; } int main() { log("Hello world!"); } خروجی کد مربوطه به صورت زیر است. info:main.cpp:15 Hello world! منبع در مرجع سیپلاسپلاس 1 1 به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر
قاسم رمضانی منش 63 ارسال شده در شهریور 98 در در 25 شهریور 1398 در 08:47، فرهاد شیری گفته است : استانداردهای پایینتر هم بود درود؛ درمورد نحوهٔ کار استانداردها نمیدانم ولی توی استاندارد توضیحی درمورد اینکه چطوری پیادهسازی بشه نداده، این مورد ظاهراً بهعهدهٔ کامپایلره. مثلاً در پیادهسازیای که GCC از N4806 کرده (فعلاً Clang هیچ پیادهسازیای نداره) از توابع داخلی خود کامپایلر استفاده کرده : [آدرس فایل در مخزن گیت] // 14.1.2, source_location creation static constexpr source_location current(const char* __file = __builtin_FILE(), const char* __func = __builtin_FUNCTION(), int __line = __builtin_LINE(), int __col = 0) noexcept { source_location __loc; __loc._M_file = __file; __loc._M_func = __func; __loc._M_line = __line; __loc._M_col = __col; return __loc; } پیادهسازیه توابع داخلی (پیوند). به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر