সি ++ তে সনাক্তকারীগুলিতে সর্বজনীন চরিত্রের নামগুলি কী


11

C ++ স্ট্যান্ডার্ডের (আমি এটা নতুন এক খেয়াল, কিন্তু এটা ইতিমধ্যে করেনি C ++ 03 অস্তিত্ব) সার্বজনীন চরিত্র নাম, হিসাবে লিখিত নির্দিষ্ট করে \uNNNNএবং \UNNNNNNNNএবং ইউনিকোড codepoints দিয়ে অক্ষর প্রতিনিধিত্বমূলক NNNN/ NNNNNNNN। এটি স্ট্রিং লিটারালগুলির সাথে দরকারী, বিশেষত যেহেতু স্পষ্টতই ইউটিএফ -8, ইউটিএফ -16 এবং ইউসিএস -4 স্ট্রিং লিটারালগুলিও সংজ্ঞায়িত করা হয়েছে। তবে শনাক্তকারীদের ক্ষেত্রে সার্বজনীন চরিত্রের অক্ষরগুলিও অনুমোদিত allowed এর পিছনে অনুপ্রেরণা কী?

বাক্যবিন্যাস স্পষ্টতই সম্পূর্ণ অপঠনযোগ্য, সনাক্তকারীগুলি লিঙ্কারের জন্য ম্যাঙ্গেল করা হতে পারে এবং এটির মতো নয় যে কোনওভাবেই নাম দ্বারা প্রতীকগুলি পুনরুদ্ধার করার জন্য কোনও স্ট্যান্ডার্ড ফাংশন ছিল। তাহলে কেন কেউ কেন এটিতে সর্বজনীন চরিত্রের আক্ষরিক সাথে একটি শনাক্তকারী ব্যবহার করবে?

সম্পাদনা: যেহেতু এটি ইতিমধ্যে C ++ 03 তে ইতিমধ্যে বিদ্যমান ছিল, তাই অতিরিক্ত প্রশ্ন আপনি কি কোনও কোড ব্যবহার করেছেন যা বাস্তবে দেখেছেন কিনা?

উত্তর:


6

আপডেট - এই উত্তরটি যদিও আমার এবং অন্যদের কাছে বোধগম্য মনে হয়েছিল, তবে এটি বেশিরভাগ ক্ষেত্রেই ভুল হতে পারে (এবং অভিপ্রায়টি সম্পর্কে যথেষ্ট পরিমাণে ভুল, কার্যকরভাবে কেবল সরল ভুল হিসাবে বিবেচিত হয়)। যেহেতু (এপ্রোগ্রামার একটি মন্তব্যে উল্লেখ করেছেন) স্ট্রিং ধ্রুবকগুলির বাইরে ইউসিএস ব্যবহারের অনুমতি দেওয়া হয় না যখন একই অক্ষরটি বেস চরিত্রের সেটগুলিতে সাধারণত প্রতিনিধিত্ব করা যায়। সুতরাং, কীওয়ার্ডগুলি এড়ানোর জন্য এটি ব্যবহার করে না, যেমন আমার উদাহরণ হিসাবে; এবং এটির 23skiddoদ্বারা পালিয়ে যাওয়ার মতো 'সনাক্তকারী' তৈরি করতে কোনও ব্যবহার করে না2। এটি এখনও বাহ্যিক ভাষার সাথে নামগুলিকে সামঞ্জস্য করতে ব্যবহৃত হতে পারে, আমার ধারণা, তবে কেবল মনে হয়, যখন সেই নামগুলি কোনও বর্ণ বা বর্ধিত অক্ষর দিয়ে শুরু হয় এবং কেবল অক্ষর, সংখ্যা, আন্ডারলাইন এবং প্রসারিত অক্ষর থাকে - যা কোন সঠিকভাবে সেই অভিপ্রায়টিকে সমর্থন করতে অনেক বেশি সীমাবদ্ধ বলে মনে হচ্ছে। সুতরাং এটি অবশ্যই হবে যে মূল উদ্দেশ্যটি (এপ্রোগ্রামার এর উত্তর হিসাবে) শনাক্তকারীগুলিতে এই অতিরিক্ত অক্ষরগুলিকে মঞ্জুরি দেওয়ার জন্য এবং উত্স সম্পাদকদের সক্ষম করার জন্য যেখানে এই অক্ষরগুলি গ্রাফিকালি প্রদর্শিত হয়, তবুও উত্স ফাইলটি সরল ASCII তে রাখার অনুমতি দেয়।


সি ++ প্রোগ্রামগুলি অন্যান্য ভাষায় লিখিত ফাংশনগুলিতে কল করতে পারে। মানককরণ কমিটির পক্ষ থেকে এটি নিশ্চিত করা ভাল কৌশল যে সি ++ অন্য ভাষার সাথে আন্তঃযোগযোগ্য হবে যা ফাংশন নামগুলিতে অ-অক্ষর বা ইউনিকোড অক্ষরগুলিকে মঞ্জুরি দিতে পারে, এমনকি যদি এ জাতীয় ভাষা এখনও বিদ্যমান না থাকে। এটি কীভাবে লিঙ্কার স্তরে ইত্যাদি কাজ করবে ইত্যাদি স্ট্যান্ডার্ডকে নির্দিষ্ট করার দরকার নেই; তবে এটির অনুমতি দেওয়ার জন্য একটি নির্দিষ্ট পদ্ধতি থাকা ভাল।

এর ব্যবহার দেখতে আপনাকে ভবিষ্যতের দিকে তাকাতে হবে না। ধরুন আমার একটি পুরানো সি লাইব্রেরি রয়েছে যার একটি ফাংশন রয়েছে catch(বা সুরক্ষিত, বা পরিবর্তনযোগ্য) ... এবং আমি এটি সি ++ থেকে কল করতে চাই। এবং যে কারণে আমি সি কোডটি সংশোধন করতে পারি না বা করতে চাই না (যাই হোক না কেন, আমাকে পুরানো সি কোডের সাথে একাধিকবার ডিল করতে হয়েছিল যা একটি ফাংশন নাম ব্যবহার করেছে যা সি ++ কীওয়ার্ড হয়ে গেছে ...)

ইউসি নাম দিয়ে আমি এটি একটি হেডারে লিখতে পারি এবং তারপরে কেবল 'ক্যাচ_ফানস ()' কল করতে পারি:

extern "C" {
       int catc\u0068( int a, int b );  // C 'catch()' function
}
inline int catch_func( int a, int b ) { return catc\u0068(a,b); }

নিশ্চিতভাবেই এটি কুরুচিপূর্ণ, তবে এটি শিরোনামের এক জায়গায় কেবল যেহেতু তা গুরুত্বপূর্ণ নয়। অন্যান্য ভাষায় ফাংশনগুলি কল করতে স্টাবগুলি তৈরি করতে একই পন্থাটি ব্যবহার করা যেতে পারে এবং নামগুলি সি ++ কীওয়ার্ড বা ইউনিকোড, এমনকি ফাঁকা স্থান .বা অন্য বিরামচিহ্ন এম্বেড থাকা সত্ত্বেও কাজ করে

অন্যান্য বিভিন্ন ভাষায় এমন ডিভাইস রয়েছে যা সনাক্তকারী তৈরি করতে দেয় যা সাধারণ প্যাটার্ন অনুসরণ করে না; উদাহরণস্বরূপ ভেরিলোগে, \abcdএটি একটি শনাক্তকারী সমতুল্য abcd, \whileএবং \23skidooএবং \44.e2শনাক্তকারীও খুব বেশি, যা ব্যাকস্ল্যাশ উপসর্গটি এরূপ হিসাবে দেখা দরকার। ভেরিলগ যে পদ্ধতিতে ব্যবহৃত হয় তার কারণে, কোনও নামই একেবারে মঞ্জুরি দেওয়া গুরুত্বপূর্ণ, যেখানে তারা বাহ্যিক ইন্টারফেসের সাথে সম্পর্কিত।


আকর্ষণীয় ব্যবহারের ক্ষেত্রে। যদিও আমি সন্দেহ করি (যখন সম্ভব হবে) নামটি অনুবাদ করার জন্য একটি ছোট সি ফাইল লিখতে ভাল লাগবে (এবং এভাবে সি ++ সনাক্তকারী ব্যবহার করতে পারেন) এবং সেই সি ফাংশনটিতে সি ++ রয়েছে have
টমাস এডিং

1
আপনি লিখতে পারবেন না যে দুটি কারণে, প্রথম স্ট্রিংয়ের বাইরে ইউসিএস এবং অক্ষর অক্ষরগুলি প্রোগ্রামটিকে অজ্ঞাত করে না দিয়ে মৌলিক সেটগুলিতে অক্ষরের উল্লেখ করতে পারে না, দ্বিতীয়টি যদি সেই ধারাটি উপস্থিত না থাকে তবে ইউসিএসটি অনুবাদের প্রথম পর্বে পরিচালনা করা হয় এবং সুতরাং কোনও ইউসিএস বেসিক সেটের একটি চরিত্রকে উল্লেখ করে এবং চরিত্রটি নিজেই পার্থক্য করতে পারে না।
এপ্রোগ্রামার

4

এটি এমন কোনও সিস্টেমকে শনাক্তকারীতে ইউনিকোড অক্ষরগুলিকে যে কোনও মানক কনফর্মিং কম্পাইলারগুলিতে সংকলনযোগ্য ফর্ম্যাটে উত্স রফতানি করার অনুমতি দেয়। আইই, এটি বেসিক ক্যারেক্টার সেটটিতে ইউনিকোড এনকোড করার একটি উপায় (ইমেলের জন্য কম-বেশি যেমন কোটড-প্রিন্টেবল ব্যবহৃত হয়, যে সিস্টেমগুলি ভাল জানেন তারা আরও ভাল কাজ করতে সক্ষম হন, অন্যান্য সিস্টেমগুলি এখনও কাজ করছে)।


2

কেউ হয়ত কোনও বিদেশী ভাষার অক্ষর ব্যবহার করে এমন একটি শনাক্তকারী তৈরি করতে চাইতে পারে যা কীবোর্ড বা ইনপুট ডিভাইসে enteable নয়। বিকল্পভাবে, সনাক্তকারীটিতে এমন একটি অক্ষর থাকতে পারে যা ডিভাইসের ফন্ট বা আউটপুট ক্ষমতা ব্যবহার করে মুদ্রণযোগ্য নয় তবে আইডিই সঠিক প্রতিনিধিত্ব দেখাতে চায়।


4
প্রথম ক্ষেত্রে, শনাক্তকারীটিকে সেই চরিত্রটি থাকার মতো মনে হবে না, তাই কোডটি অপঠনযোগ্য হবে এবং শনাক্তকারীটি মেশিনের সাথে আসলেই কিছু যায় আসে না। এবং দ্বিতীয়টির জন্য, আইডিইতে উপস্থাপনা একটি সম্পূর্ণ পৃথক সমস্যা।
জানু হুডেক

1

সি ++ এর জন্য উত্সটিতে আক্ষরিক উপস্থিত প্রকৃত বর্ধিত অক্ষরগুলি ইউনিভার্সাল চরিত্রের নামগুলির সাথে একইরকম আচরণ করে। সনাক্তকারীগুলিতে সর্বজনীন চরিত্রের নামগুলি প্রোগ্রামারদের শনাক্তকারীগুলিতে বর্ধিত অক্ষর ব্যবহার করার অনুমতি দেয়।


এটি প্রকৃত প্রসারিত অক্ষরগুলি সমর্থিত, তাদের সর্বজনীন অক্ষরের সাথে সম্পর্কিত হতে হবে। তবে তাদের সমর্থন করতে হবে না।
জান হুডেক

1
এটি সত্য তবে এটি বিন্দুটি মিস করে না, এটি হ'ল কমিটি যদি নির্দিষ্ট করতে চায় যে প্রসারিত অক্ষরকে সমর্থনকারী বাস্তবায়নগুলি চিহ্নিতকারীগুলিতে সেই অক্ষরগুলি ব্যবহার করে সমর্থন করে তবে এর জন্য ইউসিএনগুলি সনাক্তকারীগুলিতে অনুমোদিত হতে হবে। অর্থাত্ ইউসিএনগুলি সনাক্তকারীগুলিতে অনুমোদিত হয়, অগত্যা এটি পাঠযোগ্য এবং প্রত্যেকটি হেক্সাডেসিমালে ম্যানুয়ালি নামগুলি এনকোডিং করতে পছন্দ করে তবে কারণ যদি অনুশীলনটি চিহ্নিতকারীগুলিতে ব্যাখ্যার অক্ষরগুলি ব্যবহার করার অনুমতি দিতে চায় তবে এটি নির্দিষ্ট করে যে ইউসিএনগুলি সনাক্তকারীগুলিতে অনুমোদিত।
bames53
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.