সি ++ 20 ম্যান্ডেটের উত্স কোড ফাইলগুলিতে সংরক্ষণ করা হচ্ছে?


106

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

একটি সংকলক থাকা যা হাতের লিখিত কাগজপত্রগুলি একটি ক্যামেরার মাধ্যমে স্ক্যান করে তা যথাযথ বাস্তবায়ন হবে। যদিও বাস্তবে তেমন বোধগম্যতা করা হচ্ছে না।

তবে সি ++ ২০ এখন এর সাথে উত্সের অবস্থান যুক্ত করে file_name। এটি কি এখন বোঝায় যে উত্স কোডটি সর্বদা একটি ফাইলে সংরক্ষণ করা উচিত?


13
এটি চিরকাল থেকেই সিতে রয়েছে - __FILE__। ক্লাস আপনাকে source_locationকেবল ফাংশন কল সাইটে এটি পেতে দেয়।
স্ট্যাসিগার্ল

28
আপনি কি নিজের হাতে লেখা কাগজগুলিতে ফাইলের নাম দিতে পারবেন না?
জারোড 42

8
উত্স কোডটি ফাইলগুলিতে রয়েছে কি না অন্য কোনও কিছুতে এটি বাস্তবায়নের বিশদ বলে আমি মনে করি। যদি সংকলকটি স্টিডিনের মাধ্যমে উত্স কোড খাওয়ানো যায় তবে উত্সটি কোনও ডাটাবেসে থাকতে পারে।
এলজয়

8
আমার উদাহরণটি কিছুটা বন্ধ হতে পারে তবে আপনি যদি টিসিসির মতো কিছু অন-ফ্লাই সংকলক ব্যবহার করেন তবে আপনি স্মৃতি থেকে সরাসরি সংকলন করেও ত্রুটি প্রতিবেদনের জন্য সর্বদা কিছু মানব পাঠযোগ্য উত্সের নাম সরবরাহ করতে পারেন। এটি একটি "ফাইলের নাম" থাকার অর্থ কোনও ফাইল হিসাবে সংরক্ষণ করা বোঝায় না।
ব্যবহারকারী 7860670

2
অবশ্যই এটি বাস্তবায়ন ফাইল যেমন ফাইলগুলি <iostream> নাও হতে পারে (আপনি যদি আমার অর্থ বোঝেন), ডেভেলপারদের দ্বারা লিখিত ফাইলগুলি নয়?

উত্তর:


110

না, উত্স কোড কোনও ফাইল থেকে আসতে হবে না (কোনও ফাইলেও যাবে না)।

আপনি একটি পাইপের মধ্যে সি ++ সম্পূর্ণরূপে সংকলন করতে পারেন (এবং লিঙ্ক করুন) আপনার সংকলকটিকে মাঝখানে রেখে eg

generate_source | g++ -o- -xc++ - | do_something_with_the_binary

এবং এটি কয়েক দশক ধরে এমন ছিল। আরো দেখুন:

std::source_locationসি ++ 20 এ প্রবর্তনের ফলে এই অবস্থার কোনও পরিবর্তন হয় না। এটি ঠিক যে কিছু কোডের একটি সু-সংজ্ঞায়িত উত্সের অবস্থান থাকবে না (বা এটি ভাল সংজ্ঞাযুক্ত হতে পারে তবে খুব অর্থবহ নয়)। আসলে, আমি বলব যে std::source_locationফাইলগুলি সংজ্ঞায়িত করার জন্য জিদ কিছুটা মায়োপিক ... যদিও ন্যায্যতার সাথে এটি কেবলমাত্র ম্যাক্রো-কম সমতুল্য __FILE__এবং __LINE__যা ইতিমধ্যে সি ++ (এবং সি) তে বিদ্যমান রয়েছে।

@ এইচবিভি 6 নোট করে যে আপনি যদি এর মানটি মুদ্রণ করেন __FILE__ স্ট্যান্ডার্ড ইনপুট স্ট্রিম থেকে জিসিসি ব্যবহার করে সংকলনের :

echo -e '#include <iostream>\n int main(){std::cout << __FILE__ ;}' | g++ -xc++  -

ফলস্বরূপ নির্বাহযোগ্য প্রিন্টগুলি চালাচ্ছেন <stdin>

সোর্স কোড এমনকি ইন্টারনেট থেকে আসতে পারে।

@ মরউভেন এই কোডটি নোট করেছেন:

#include <https://raw.githubusercontent.com/Morwenn/poplar-heap/master/poplar.h>

// Type your code here, or load an example.
void poplar_sort(int* data, size_t size) {
    poplar::make_heap(data, data + size);
    poplar::sort_heap(data, data + size);
}

গডবোল্টে কাজ করে (তবে আপনার মেশিনে কাজ করবে না - কোনও জনপ্রিয় সংকলক এটি সমর্থন করে না))

আপনি কি ভাষার উকিল? ঠিক আছে, সুতরাং স্ট্যান্ডার্ড পরামর্শ দেওয়া যাক ..

ফাইলগুলি থেকে সি ++ প্রোগ্রাম উত্সগুলি আসা উচিত কিনা এই প্রশ্নের ভাষার মানটিতে পরিষ্কারভাবে উত্তর দেওয়া হয়নি। সি ++ 17 স্ট্যান্ডার্ড (এন 4713) এর খসড়াটি দেখুন, বিভাগ 5.1 [লেক্স.সেসারেট] পড়ছে:

  1. প্রোগ্রামটির পাঠ্যটি এই নথিতে উত্স ফাইল নামক ইউনিটে রাখা হয়েছে। সমস্ত শিরোলেখ (20.5.1.2) এবং উত্স ফাইলগুলি অন্তর্ভুক্ত (19.2) প্রিপ্রোসেসিং নির্দেশের মাধ্যমে অন্তর্ভুক্ত একটি উত্স ফাইল # অন্তর্ভুক্ত, শর্তসাপেক্ষ অন্তর্ভুক্তি (19.1) প্রিপ্রোসেসিং নির্দেশিকাগুলির দ্বারা বাদ দেওয়া কোনও উত্স লাইনকে অনুবাদ ইউনিট বলে।

সুতরাং, উত্স কোড অগত্যা প্রতি সেফ কোনও ফাইলে রাখা হয় না, তবে "উত্স ফাইল নামক ইউনিটে" থাকে। কিন্তু তারপরে, অন্তর্ভুক্তগুলি কোথা থেকে আসে? কেউ ধরে নিতে পারে যে তারা ফাইল সিস্টেমে নাম করা ফাইলগুলি থেকে এসেছে ... তবে এটিও আদেশ দেওয়া হয় না।

যে কোনও হারে, std::source_locationএই শব্দটিকে C ++ 20 এ পরিবর্তন করতে বা এর ব্যাখ্যাকে (এএএএফআইটি) প্রভাবিত করার মতো বলে মনে হচ্ছে না।


9
সেই পাইপটি স্ট্যান্ডার্ডের উদ্দেশ্যে একটি "উত্স ফাইল"।
মেলপোমেন

5
আমি সি স্ট্যান্ডার্ডটির দিকে নজর দিচ্ছি, যা সংজ্ঞায়িত করে: "প্রোগ্রামটির পাঠ্যটি এই আন্তর্জাতিক স্ট্যান্ডার্ডে সোর্স ফাইল (বা ফাইলগুলি প্রিপ্রোসেসিং ) বলা হয় units " সুতরাং যেখানেই কোডটি সংরক্ষিত আছে, এটি স্ট্যান্ডার্ডিজের একটি "উত্স ফাইল"। (সংযোজন: [লেকস] এর অধীনে সি ++ স্ট্যান্ডার্ডে অনুরূপ ভাষা পাওয়া যায়))
মেল্পোমেন

8
@ মেলপোমেন: ইউনিটগুলিকে কেবল উত্স ফাইল বলা হয় , এটি আসলে বলে না যে তাদের আসলে উত্স ফাইল হতে হবে। তবে আমি এটিকে অন্তর্ভুক্ত করার জন্য উত্তরটি সম্পাদনা করব।
einpoklum

13
স্রেফ এটি জিসিসির মাধ্যমে চেষ্টা করেছেন: "প্রতিধ্বনি '# অন্তর্ভুক্ত <stdio.h> int মূল প্রধান () {প্রিন্টফ ("% s \\ n ", __FILE__); ফিরে 1;}' | gcc -o পরীক্ষা -xc -" ( উক্তি ব্যতীত). যখন মৃত্যুদন্ড কার্যকর করা হয় তখন এটি <stdin> মুদ্রণ করে।
এইচবিভি 6

11
শর্তাদি এবং মান এবং মান (এবং বিজ্ঞান) এর ধারণাগুলি সম্পর্কে এখানে একটি মজার বিষয়: এগুলি সাধারণত পারমাণবিক're অর্থাত্ "উত্স ফাইল" কোনও "ফাইল" নয় যা "উত্স", বাস্তবে, "ফাইল" শব্দটি কেবল সংজ্ঞায়িত করা যায় না - গণিতের সংখ্যার সাথে তুলনা করুন: কেবল একটি "বলে কিছু নেই সংখ্যা ", কেবল" প্রাকৃতিক সংখ্যা "," যুক্তিযুক্ত সংখ্যা "," আসল সংখ্যা "ইত্যাদি
জোকার_ভিডি

53

সি ++ ২০ এর আগেও, মানটিতে রয়েছে:

__FILE__

বর্তমান উত্স ফাইলের অনুমিত নাম (একটি অক্ষরের স্ট্রিং আক্ষরিক)।

সংজ্ঞা একই জন্য source_location::file_name

যেমন, সি ++ ২০-এ ফাইল-সিস্টেমের চেয়ে কম প্রয়োগের জন্য সমর্থন করার ক্ষেত্রে কোনও পরিবর্তন হয়নি।

স্ট্যান্ডার্ডটি "উত্স ফাইল" এর অর্থ হুবহু সংজ্ঞায়িত করে না, সুতরাং এটি কোনও ফাইল সিস্টেমকে বোঝায় কিনা তা ব্যাখ্যা পর্যন্ত হতে পারে। সম্ভবত, "হস্তাক্ষরযুক্ত নোট যা আপনি আমাকে তখনই দিয়েছিলেন" তা যদি ভাষার সেই বাস্তবায়নে "উত্স ফাইল" সনাক্ত করে তবে এটি বাস্তবায়নের জন্য উপযুক্ত হতে পারে।


উপসংহারে: হ্যাঁ, উত্সগুলি স্ট্যান্ডার্ড দ্বারা "ফাইল" হিসাবে উল্লেখ করা হয়েছে, তবে একটি "ফাইল" কী এবং কোনও ফাইল সিস্টেম জড়িত কিনা তা অনির্দিষ্ট।


2
@ ইয়াকিসারভিনেন আমি এই নিয়মের "অনুমান" যোগ্যতার ঠিক উদ্দেশ্যটি জানি না, তবে আমি অনুমান করি :) এটি একটি স্পষ্টতা যে ফাইলটির নামটি নিখুঁত বা তাত্পর্যপূর্ণ হওয়া দরকার, বরং দৃষ্টিকোণ থেকে একটি আপেক্ষিক নাম সংকলক যথেষ্ট। আমার ভুল হতে পারে.
এরেরিকা

4
আমি শুধু দেখতে পারেন scanner-c++ফেরার "বাম-ক্যাবিনেটে, তৃতীয় ড্রয়ারের, চতুর্থ লাল-ট্যাবযুক্ত ফোল্ডারের, পৃষ্ঠা 17"
ডিএমকেকে --- প্রাক্তন-মডারেটর বিড়ালছানা

2
এফডাব্লুআইডাব্লু, পসিক্স অর্থে একটি পাইপ (বা অন্য কোনও ফাইল-ইশ জিনিস) একটি "ফাইল" - যেমন, স্টিডিন / স্টডআউট "ফাইল", কেবল এই অর্থে ডিস্ক ফাইল ইত্যাদি নয়।

3
@ ইয়াকিসারভিনেন: কমিটি প্রায়শই এমন পরিস্থিতিতে ভাতা দেয় যেখানে অস্পষ্ট বাস্তবায়নগুলি সাধারণ আচরণের বিপরীতে কিছু করার ভাল কারণ থাকতে পারে। এটি করার ক্ষেত্রে, এটি গ্রাহক লেখকদের উপর নির্ভর করে যে তাদের গ্রাহকরা সাধারণের আচরণটি কোনও বিকল্পের চেয়ে কম-বেশি দরকারী বলে খুঁজে পান কিনা judge এই বিষয়গুলি প্রয়োগকারীদের বিচারের বাকী রেখে যাওয়ার বিষয়টি "অস্পষ্টতা" হিসাবে দেখা যেতে পারে তবে এটি একটি ইচ্ছাকৃত একটি, যেহেতু ভাল সংকলক লেখকরা তাদের গ্রাহকদের প্রয়োজন সম্পর্কে কমিটির চেয়ে বেশি জানতে পারবেন more
সুপারক্যাট

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