সংলগ্ন স্ট্রিং আক্ষরিক সংমিশ্রণে


17

সি এবং সি ++ একক স্ট্রিং আক্ষরিক হিসাবে সংলগ্ন স্ট্রিং ল্যাটারালগুলি সংকলন করে। উদাহরণস্বরূপ:

"Some text..." "and more text"

সমান:

"Some text...and more text"

অন্যান্য সি-পরিবার ভাষায় সি # বা জাভাতে এটি একটি সিনট্যাক্স ত্রুটি (যা পুরোপুরি ভাল বিটিডাব্লু)।

সি এবং সি ++ এর জন্য যুক্তি / historicalতিহাসিক কারণ কী?

উত্তর:


24

মূল সি ভাষাটি 1969-1972 সালে ডিজাইন করা হয়েছিল যখন 80 টি কলামের পাঞ্চ কার্ডের মাধ্যমে এখনও কম্পিউটিং প্রাধান্য পেয়েছিল। এর ডিজাইনাররা 80 টি কলাম ডিভাইস যেমন ASR-33 টেলি টাইপ ব্যবহার করেছেন। এই ডিভাইসগুলি স্বয়ংক্রিয়ভাবে পাঠ্য মোড়ানো হয়নি, সুতরাং 80 টি কলামের মধ্যে উত্স কোড রাখার আসল প্ররোচনা ছিল। অবশেষে ফ্রি ফর্ম্যাটে চলে যাওয়ার আগে ফোর্টরান এবং কোবোলের তা করার জন্য সুস্পষ্ট ধারাবাহিকতা ব্যবস্থা ছিল।

ডেনিস রিচি (আমি ধরে নিলাম) ব্যাকরণের কোনও দ্বিধাগ্রস্থতা নেই তা উপলব্ধি করার জন্য এটি একটি উজ্জ্বলতার স্ট্রোক ছিল এবং সংলগ্ন সংক্ষিপ্ত স্ট্রিংগুলিকে সংমিশ্রণ করার জন্য কম্পাইলারটি পাওয়ার জন্য দীর্ঘ এএসসিআইআই স্ট্রিংগুলি 80 টি কলামে সজ্জিত করা যেতে পারে। অগণিত সি প্রোগ্রামাররা সেই ছোট বৈশিষ্ট্যের জন্য কৃতজ্ঞ ছিল।

বৈশিষ্ট্যটি একবার আসার পরে কেন এটি কখনই সরানো হবে? এটি কোনও শোকের কারণ হয় না এবং প্রায়শই কার্যকর হয়। আমি এক ভাষা আরও ভাষা এটি চেয়েছিলেন। আধুনিক প্রবণতাটি ট্রিপল কোট বা অন্যান্য চিহ্ন সহ প্রসারিত স্ট্রিংগুলি হ'ল, তবে সি এর বৈশিষ্ট্যটির সরলতা কখনই শেষ হয়ে যায় নি।


8
আরেকটি কারণ হ'ল এটি #define FOO "foo-value""FOO's value is " FOO "."
প্রিপ্রোসেসর

3
@ ব্লারফ্ল: ঠিক তেমন ম্যাক্রো প্রতিস্থাপন সম্পূর্ণ হওয়ার পরে স্ট্রিং কনটেনটেশন হয় তা উপলব্ধি করা গুরুত্বপূর্ণ।
ডেভিড.পিএফএক্স

7

সি এর +সি # এবং জাভার মতো কোনও নির্দিষ্ট স্ট্রিং কনক্যাটেনশন অপারেটর ( ) নেই। সি # বা জাভাতে, যখন সংকলকটি দেখবে

"a" + "b"

এটি ঠিক যেমন কোডটি সংকলন করতে পারে

"ab"

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

"a" "b"

ঠিক একই জিনিস মানে

"ab"

স্বাভাবিকভাবে সি ++ একই সম্মেলনের উত্তরাধিকার সূত্রে প্রাপ্ত। Standard C ++ লাইব্রেরির overloads যদিও +উপর std::stringগড় স্ট্রিং সংযুক্তকরণের জন্য, কম্পাইলার একসঙ্গে বেড়ে ওঠা করার চেষ্টা করে না "a" + "b"কারণ যে আসলে একটি ত্রুটি (আপনি দুই যোগ করতে পারবেন না const char *পয়েন্টার একসঙ্গে)।


1
সি এর কোনও নির্দিষ্ট স্ট্রিং টাইপ নেই, পরিবর্তে মেমরির অক্ষরগুলিতে পয়েন্টার বেছে নেওয়া। আপনি পয়েন্টারগুলি যোগ করতে পারবেন না, এবং এমনকি যদি +কোনওভাবে উপসংহার বোঝাতে তৈরি করা হয়েছিল, তখনও আপনার এখনও স্মৃতিতে সংক্ষিপ্ত স্ট্রিংটি কোথায় যায় সেই সমস্যাটি সমাধান করতে হবে।
blrfl
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.