ভিজুয়াল স্টুডিওতে "stdafx.h" কী ব্যবহৃত হয়?


500

stdafx.hআমি যখন ভিজ্যুয়াল স্টুডিও ২০১০-তে একটি প্রকল্প শুরু করি তখন নামকৃত একটি ফাইল স্বয়ংক্রিয়ভাবে উত্পন্ন হয় I

কি জন্য stdafx.hব্যবহার করা হয়? আমি ঠিক এই হেডার ফাইলটি সরিয়ে ফেলি এটা কি ঠিক?


2
যদি আমি stdafx.h সম্পর্কিত সংকলন ত্রুটি পেয়ে যাই তবে আমি সাধারণত এই ফাইলটি তৈরি বা ব্যবহার না করার জন্য সেটিংস সেট করে
রেখেছি

6
নিবন্ধ: নোটিশগুলির জন্য StdAfx.h - viva64.com/en/b/0265

আপনি অন্যান্য প্ল্যাটফর্মগুলিতে শিরোনাম ফাইলটি ঠিক সূক্ষ্মভাবে ব্যবহার করতে পারেন, তাদের কাছে কেবল একটি সাধারণ শিরোনাম ফাইল। এটি কেবল সেখানে কোনও কার্যকারিতা সুবিধা দেয় না।
Andrea

উত্তর:


826

সমস্ত সি ++ সংকলক মোকাবেলা করার জন্য একটি গুরুতর পারফরম্যান্স সমস্যা আছে। সি ++ কোড সংকলন একটি দীর্ঘ, ধীর প্রক্রিয়া।

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

এটি উইন্ডোজের পক্ষে অনন্য নয় তবে উইন্ডোজের মতো একটি বৃহত এপিআইয়ের বিপক্ষে সংকলন করতে হবে এমন সমস্ত সংকলক দ্বারা सामना করা একটি পুরানো সমস্যা।

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

সংস্থাপকটি প্রতিটি সিপিপি ফাইল সংকলন করতে শুরু না করে এবং এর কয়েক ডজন আক্ষরিক অন্তর্ভুক্ত প্রতিবার স্ক্র্যাচ থেকে অন্তর্ভুক্ত করে বিপুল সময় সাশ্রয় করতে পারে।

কৌতুকটি একটি বিশেষ শিরোলেখ ফাইলকে সমস্ত সংকলন শৃঙ্খলার প্রারম্ভিক বিন্দু হিসাবে চিহ্নিত করে, তথাকথিত 'প্রাক্পম্পাইল্ড শিরোলেখ' ফাইল, যা সাধারণত historical তিহাসিক কারণে সাধারণত stdafx.h নামে একটি ফাইল ।

আপনার stdafx.h ফাইলটিতে আপনার যথাযথ ক্রম অনুসারে আপনার সমস্ত বৃহত বিশাল শিরোনামকে তালিকাভুক্ত করুন এবং তারপরে আপনার প্রতিটি সিপিপি ফাইল কোনও শীর্ষবিন্দুতে #include "stdafx.h"কোনও অর্থবোধক সামগ্রীর আগে শুরু করুন (কেবলমাত্র অনুমোদিত জিনিসটির আগে অনুমোদিত) মন্তব্য)।

এই অবস্থার অধীনে, স্ক্র্যাচ থেকে শুরু করার পরিবর্তে , সংকলক এর মধ্যে সমস্ত কিছু সংকলনের ইতিমধ্যে সংরক্ষিত ফলাফলগুলি থেকে সংকলন শুরু করে stdafx.h

আমি বিশ্বাস করি না যে এই কৌশলটি মাইক্রোসফ্ট সংকলকগুলির পক্ষে অনন্য, না আমি মনে করি এটি একটি আসল বিকাশ ছিল।

: মাইক্রোসফট কম্পাইলার, সেটিং যে নিয়ন্ত্রণ precompiled হেডার ব্যবহার কম্পাইলার করার জন্য একটি কমান্ড লাইন আর্গুমেন্ট দ্বারা নিয়ন্ত্রিত হয় জন্য /Yu "stdafx.h"। আপনি যেমন কল্পনা করতে পারেন, stdafx.hফাইলের নামটি কেবল একটি সম্মেলন; আপনি চাইলে নামটি পরিবর্তন করতে পারেন।

ভিজ্যুয়াল স্টুডিও ২০১০-তে, এই বৈশিষ্ট্যটি জিপিআই থেকে নিয়ন্ত্রিত হয় সিপিপি প্রকল্পে রাইট ক্লিক করে, 'সম্পত্তি' নির্বাচন করে এবং "কনফিগারেশন বৈশিষ্ট্যসমূহ \ সি / সি ++ \ প্রাক্পম্পাইল্ড শিরোনাম" এ নেভিগেট করে। ভিজ্যুয়াল স্টুডিওর অন্যান্য সংস্করণগুলির জন্য, জিইউআইতে অবস্থানটি আলাদা হবে।

মনে রাখবেন যে আপনি যদি পূর্বনির্ধারিত শিরোলেখ অক্ষম করেন (বা কোনও প্রকল্পের মাধ্যমে তাদের প্রকল্প চালান যা তাদের সমর্থন করে না), এটি আপনার প্রোগ্রামকে অবৈধ করে না; এর সহজ অর্থ হল যে আপনার সরঞ্জামটি প্রতিবার স্ক্র্যাচ থেকে সমস্ত কিছু সংকলন করবে।

যদি আপনি উইন্ডোজ নির্ভরতা না করে কোনও লাইব্রেরি তৈরি করেন তবে আপনি সহজেই মন্তব্য করতে বা ফাইল #includeথেকে গুলি সরাতে পারেন stdafx.h। প্রতি সেফ ফাইল সরানোর দরকার নেই, তবে স্পষ্টত আপনি উপরের প্রম্পম্পাইল শিরোনাম সেটিংসটি অক্ষম করে এটিও করতে পারেন।


6
এমনকি আপনি যদি স্টাডি নেমস্পেস থেকে কেবল ফাইলগুলির জন্য ব্যবহার করেন তবে আপনি একটি গতি সুবিধা পাবেন
ঝিতা

11
ওম, খুব সুন্দর উত্তর সত্যই আমি স্ট্যান্ডার্ড কমপ্লায়েন্ট সি সংকলকটি খুঁজছিলাম। দেখা যাচ্ছে যে আমি প্রকল্পের বৈশিষ্ট্যগুলি থেকে মাইক্রো $ t অফ এক্সটেনশনগুলি অক্ষম করতে পারি, সংকলকটিকে "অটো" থেকে "সি" তে পরিবর্তন করতে পারি এবং আপনার "স্ট্যান্ডার্ড" সংকলক এবং আইডিই বেশ ভাল।
EKanadily

4
@ Ishষি: 'লাইন' দ্বারা, আপনার মানে #include "stdafx.h"? অবশ্যই, তবে এটি একটি স্ট্যান্ডার্ড # অন্তর্ভুক্ত। "এমএস এক্সটেনশন" অংশটি কেবল একটি সংকলক পারফরম্যান্স অপ্টিমাইজেশন; এটি একটি শিরোলেখ ফাইল থাকার শব্দার্থকে পরিবর্তন করে না যা "stdafx.h" বলে ডাকা হয়। মনে রাখবেন যে আপনি যদি অন্তর্ভুক্তটি সরিয়ে ফেলে থাকেন এবং আপনার কোড stdafx.h- র মাধ্যমে অন্তর্ভুক্ত থাকা কোনও কিছুর উপর নির্ভর করে, আপনাকে সরাসরি এটি অন্তর্ভুক্ত করতে হবে।
ইউরো মিশেল্লি

4
@ Youda008, একেবারেই সত্য নয়। কোনও কোড ফাইল সংকলনের আগে শিরোনামের সামগ্রীগুলি সোজা এবং আক্ষরিক অর্থে সেই জায়গায় "পেস্ট" করা হয় যেখানে আপনি #includeউত্স ফাইলে ছিলেন (একই 'প্রিপ্রোসেসর' পদক্ষেপ যা ম্যাক্রোগুলিকে মূল্যায়ন করে)। ফলস্বরূপ মোট ফাইলটি প্রকৃত সংকলককে দেওয়া হয়, যা কখনও কোনও শিরোনাম ফাইলকে পৃথক সত্তা হিসাবে দেখেনি। আপনি কেবলমাত্র শিরোলেখ ফাইলটিতে ঘোষণা রেখেছিলেন কারণ এটিই একটি শিরোলেখ ফাইলটিতে ভাল কাজ করে - এটি একটি প্রচলিত নিয়ম। চেষ্টা করে দেখুন! একটি সম্পূর্ণ প্রোগ্রাম সহ একটি শিরোনাম ফাইল তৈরি করুন, তারপরে এমন একটি উত্স ফাইল তৈরি করুন যা এর জন্য কেবল একটি # অন্তর্ভুক্ত রয়েছে। এটা জরিমানা সংকলন।
ইউরো মিশেলি

28
.তিহাসিক কৌতূহল। স্টাডিএফএক্সএইচএইচটির নাম 1992 সালের, যখন এমএফসি প্রকাশের আগে 'অ্যাপ্লিকেশন ফ্রেমওয়ার্ক এক্সটেনশানস' বলা হত dates ভিজ্যুয়াল স্টুডিও 2015 এখনও নামের ডিফল্ট ..
ক্যারেট

48

এটি একটি "প্রাকম্পম্পাইল্ড শিরোলেখ ফাইল" - stdafx.h এ অন্তর্ভুক্ত থাকা কোনও শিরোনাম পরবর্তী সংকলনের সময় সময় সাশ্রয় করার জন্য প্রাক প্রক্রিয়াজাত হয়। আপনি এখানে এমএসডিএন-এ আরও পড়তে পারেন ।

যদি আপনি ক্রস-প্ল্যাটফর্ম অ্যাপ্লিকেশন তৈরি করে থাকেন তবে আপনার প্রকল্প তৈরি করার সময় "খালি প্রকল্প" পরীক্ষা করুন এবং ভিজ্যুয়াল স্টুডিও আপনার প্রকল্পে কোনও ফাইল রাখবে না।


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

2
@ অদ্বিতীয়: সম্ভবত আমার উত্তরটি এটিকে অন্যথায় শোনায়, সুতরাং সেই অংশটি স্পষ্ট করার জন্য ধন্যবাদ।
ক্যাসাব্লাঙ্কা

3

"স্টাডএফএক্সএইচএইচ" একটি পূর্বনির্ধারিত শিরোলেখ। এটি স্ট্যান্ডার্ড সিস্টেমের জন্য ফাইল অন্তর্ভুক্ত করে এবং প্রকল্প-নির্দিষ্ট জন্য অন্তর্ভুক্ত ব্যবহৃত ফাইলগুলি অন্তর্ভুক্ত থাকে তবে খুব কম সময়ে পরিবর্তিত হয় wh যা সংকলনের সময় এবং অপ্রয়োজনীয় প্রক্রিয়াজাতকরণ হ্রাস করে।

প্রাকম্পম্পাইল্ড শিরোলেখ stdafx.h মূলত মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিওতে ব্যবহৃত হয় যা একবার সংকলিত ফাইলগুলি এবং স্ক্র্যাচ থেকে এটি সংকলন করার প্রয়োজন হয় না তা কম্পাইলারের কাছে জানাতে। আপনি এটি সম্পর্কে আরও পড়তে পারেন

http://www.cplusplus.com/articles/1TUq5Di1/

https://docs.microsoft.com/en-us/cpp/ide/precompiled-header-files?view=vs-2017


-10

আমি নিজেই এটির মধ্যে দৌড়েছি যেহেতু আমি নিজেকে খালি হাড়ের কাঠামো তৈরি করার চেষ্টা করছি তবে ভিজ্যুয়াল স্টুডিও 2017 সালে একটি নতুন উইন 32 প্রোগ্রাম বিকল্প তৈরি করে শুরু করেছি। "Stdafx.h" অপ্রয়োজনীয় এবং এটি সরানো উচিত। তারপরে আপনি আপনার সলিউশন এক্সপ্লোরারে থাকা বোকা "stdafx.h" এবং "stdafx.cpp" মুছে ফেলতে পারবেন পাশাপাশি আপনার প্রকল্পের ফাইলগুলিও। এটির জায়গায়, আপনাকে লাগাতে হবে

#include <Windows.h>

পরিবর্তে.

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