একটি বড় সি ++ প্রকল্পে আমি কীভাবে অপ্রয়োজনীয় # অন্তর্ভুক্ত ফাইলগুলি সনাক্ত করব?


96

আমি ভিজ্যুয়াল স্টুডিও ২০০৮ এ একটি বৃহত সি ++ প্রকল্পে কাজ করছি এবং অযথা #includeনির্দেশাবলীর সাথে প্রচুর ফাইল রয়েছে । কখনও কখনও #includeগুলি কেবল নিদর্শন এবং তাদের অপসারণের সাথে সবকিছু জরিমানা সংকলন করবে এবং অন্যান্য ক্ষেত্রে ক্লাসগুলি এগিয়ে ঘোষণা করা যেতে পারে এবং # অন্তর্ভুক্ত করা .cppফাইলটিতে স্থানান্তরিত হতে পারে । এই উভয় ক্ষেত্রে সনাক্ত করার জন্য কোনও ভাল সরঞ্জাম আছে?

উত্তর:


50

এটি অপ্রয়োজনীয় ফাইলগুলি অন্তর্ভুক্ত করার সময় এটি প্রকাশ করবে না, ভিজ্যুয়াল স্টুডিওতে একটি সেটিং রয়েছে /showIncludes(কোনও .cppফাইলের ডান ক্লিক করুন Properties->C/C++->Advanced) যা সংকলনের সময় সমস্ত অন্তর্ভুক্ত ফাইলগুলির একটি ট্রি আউটপুট দেবে। এটি এমন ফাইলগুলি সনাক্ত করতে সহায়তা করতে পারে যা অন্তর্ভুক্ত করার দরকার নেই।

আপনি মুছে ফেলা যেতে পারে এমন ক্রুফটটি আরও সহজ করে তুলতে আপনাকে কম হেডার ফাইল নির্ভরতা দিয়ে দূরে যেতে পিম্পল আইডিয়মটি একবার দেখে নিতে পারেন।


4
/ শো-ইনক্লুডস দুর্দান্ত। ম্যানুয়ালি এই কাজটি করা ছাড়া তা হতাশ হয়ে উঠছিল।
শম্বলিক

30

পিসি লিন্ট এটির জন্য বেশ ভাল কাজ করে এবং এটি আপনার জন্যও অন্যান্য প্রকারের বোকা সমস্যাগুলির সন্ধান করে। এটিতে কমান্ড লাইন বিকল্প রয়েছে যা ভিজ্যুয়াল স্টুডিওতে বাহ্যিক সরঞ্জাম তৈরি করতে ব্যবহার করা যেতে পারে, তবে আমি খুঁজে পেয়েছি যে ভিজুয়াল লিন্ট অ্যাডইনটি কাজ করা সহজ। এমনকি ভিজ্যুয়াল লিন্টের ফ্রি সংস্করণও সহায়তা করে। তবে পিসি-লিন্টকে একটি শট দিন। এটি কনফিগার করে যাতে এটি আপনাকে অনেক বেশি সতর্কতা দেয় না তবে কিছুটা সময় নেয় তবে এটি কী পরিণত হবে তা দেখে আপনি অবাক হয়ে যাবেন।


4
পিসি-লিন্টের সাহায্যে এটি কীভাবে করা যায় সে সম্পর্কে কয়েকটি নির্দেশাবলী রিভারব্ল্যাড.কম.উকে
ডেভিড সাইকস

29

এখানে একটি নতুন ঝনঝন-ভিত্তিক সরঞ্জাম রয়েছে , আপনি কী ব্যবহার করেন তা অন্তর্ভুক্ত করে যার লক্ষ্য এটি করা হয়।


নোট করুন যে এটি বর্তমানে
ঝাঁকুনি

4 জুন 2015 iwyu 0.4 প্রকাশিত হয়েছিল। এটি আইভিউ হোম পৃষ্ঠা অনুসারে llvm + ঝনঝন 3.6 এর সাথে সামঞ্জস্যপূর্ণ ।
এরিক সিজলুন্ড

26

!! অস্বীকৃতি !! আমি একটি বাণিজ্যিক স্ট্যাটিক বিশ্লেষণ সরঞ্জামে (পিসি লিন্ট নয়) কাজ করি। !! অস্বীকৃতি !!

একটি সাধারণ অ পার্সিং পদ্ধতির সাথে বেশ কয়েকটি সমস্যা রয়েছে:

1) ওভারলোড সেট:

এটি সম্ভবত সম্ভব যে কোনও ওভারলোডেড ফাংশনটিতে বিভিন্ন ফাইল থেকে আসা ঘোষণা রয়েছে rations এটি হতে পারে যে একটি শিরোনাম ফাইল অপসারণের ফলে একটি কমপাইল ত্রুটির পরিবর্তে আলাদা ওভারলোড চয়ন করা হবে! ফলাফলটি শব্দার্থবিজ্ঞানের একটি নীরব পরিবর্তন হবে যা পরবর্তী সময়ে অনুসরণ করা খুব কঠিন হতে পারে।

2) টেমপ্লেট বিশেষীকরণ:

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

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


@ রিচার্ডকার্ডেন: আপনার সফ্টওয়্যার (কিউএ সি ++) খুব ব্যয়বহুল।
Xender টিউলিপ

13
@ এক্সান্ডারটুলিপ: বিক্রয় পিচে শেষ না করেই এটার প্রতিক্রিয়া জানানো শক্ত - তাই আমি আগেই ক্ষমা চাইছি। আইএমএইচও, আপনাকে যা বিবেচনা করতে হবে তা হ'ল যে কোনও যুক্তিসঙ্গত আকারের প্রকল্পে এই জাতীয় জিনিসগুলি (পাশাপাশি আরও অনেক ভাষা / নিয়ন্ত্রণ প্রবাহ বাগ) এর জন্য কোনও ভাল ইঞ্জিনিয়ারকে কত সময় লাগবে। সফ্টওয়্যার পরিবর্তন হিসাবে একই কাজ বারবার পুনরাবৃত্তি করা প্রয়োজন। সুতরাং যখন আপনি সময় সাশ্রয়ের পরিমাণ নিয়ে কাজ করেন তখন সরঞ্জামটির ব্যয়টি সম্ভবত তাত্পর্যপূর্ণ নয়।
রিচার্ড কর্ডেন

10

আমি এই জাতীয় কোনও সরঞ্জাম জানি না এবং আমি অতীতে একটি লেখার বিষয়ে চিন্তা করেছি, তবে দেখা গেছে যে এটি সমাধান করা একটি কঠিন সমস্যা।

বলুন আপনার উত্স ফাইলে আহ এবং বিএইচ রয়েছে; আহ ধারণ করে #define USE_FEATURE_Xএবং বিএইচ ব্যবহার করে #ifdef USE_FEATURE_X। যদি #include "a.h"মন্তব্য করা হয়, আপনার ফাইলটি এখনও সংকলন করতে পারে, তবে আপনি যা প্রত্যাশা করেছেন তা নাও করতে পারে। এই প্রোগ্রামোগ্রাফিকভাবে সনাক্ত করা হচ্ছে অ-তুচ্ছ।

এটি যে কোনও সরঞ্জাম যা করে তা আপনার বিল্ড এনভায়রনমেন্টটিও জানতে হবে। আহ যদি দেখতে লাগে:

#if defined( WINNT )
   #define USE_FEATURE_X
#endif

তারপরে USE_FEATURE_Xকেবল সংজ্ঞায়িত হলেই WINNTএটি সংজ্ঞায়িত করা হয়, সুতরাং সরঞ্জামটিটি জানতে হবে যে নিজেই সংকলক দ্বারা কী নির্দেশাবলী উত্পন্ন হয় পাশাপাশি কোনও শিরোনাম ফাইলের পরিবর্তে সংকলিত কমান্ডে কোনটি নির্দিষ্ট করা হয়।


9

টিমারম্যানসের মতো আমিও এর জন্য কোনও সরঞ্জামের সাথে পরিচিত নই। তবে আমি জানি এমন প্রোগ্রামাররা যারা পার্ল (বা পাইথন) স্ক্রিপ্ট লিখেছেন তাদের প্রত্যেককে একবারে একটি করে লাইন অন্তর্ভুক্ত করে মন্তব্য করার চেষ্টা করতে হবে এবং তারপরে প্রতিটি ফাইল সংকলন করতে হবে।


দেখা যাচ্ছে যে এরিক রেমন্ডের এখন এটির জন্য একটি সরঞ্জাম রয়েছে

গুগলের সিপিপ্লিন্ট.পি- র একটি "আপনি যা ব্যবহার করেন" নিয়মে (অনেকের মধ্যে) অন্তর্ভুক্ত রয়েছে তবে আমি যতটা বলতে পারি, কোনও " কেবলমাত্র আপনি যা ব্যবহার করেন তা অন্তর্ভুক্ত করে না ।" তবুও এটি কার্যকর হতে পারে।


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

4
ম্যাকের কোডওয়ারিওর এটি করার জন্য একটি স্ক্রিপ্ট তৈরি করত, মন্তব্য করত, সংকলন করত, ত্রুটি-অন-মন্তব্য করে, # অন্তর্ভুক্তির শেষে অবিরত থাকে। এটি কেবলমাত্র একটি ফাইলের শীর্ষে # অন্তর্ভুক্তদের জন্য কাজ করেছিল, তবে তারা যেখানে থাকে সেখানে সাধারণত। এটি নিখুঁত নয়, তবে এটি জিনিসগুলি যুক্তিসঙ্গত বুদ্ধিমান করে তোলে।
স্লাইক্রেল

5

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


4

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



3

যদি আপনার হেডার ফাইলগুলি সাধারণত শুরু হয়

#ifndef __SOMEHEADER_H__
#define __SOMEHEADER_H__
// header contents
#endif

(একবারে # প্রাগমা ব্যবহারের বিপরীতে) আপনি এটিতে পরিবর্তন করতে পারেন:

#ifndef __SOMEHEADER_H__
#define __SOMEHEADER_H__
// header contents
#else 
#pragma message("Someheader.h superfluously included")
#endif

এবং যেহেতু সংকলক সি.পি.পি ফাইলের নাম সংকলিত করে আউটপুট দেয় তাই আপনাকে কমপক্ষে কোন সিপিপি ফাইলটি শিরোনামকে একাধিক বার আনার কারণ বলে দেয়।


12
আমি মনে করি একাধিকবার শিরোনাম অন্তর্ভুক্ত করা ভাল। আপনি যা ব্যবহার করেন তা অন্তর্ভুক্ত করা ভাল এবং এটি করার জন্য আপনার অন্তর্ভুক্ত ফাইলগুলির উপর নির্ভর করে না। আমি মনে করি যে ওপি যা চায় তা হল # অন্তর্ভুক্তগুলি সন্ধান করা যা বাস্তবে ব্যবহৃত হয় না।
রায়ান জিনস্ট্রোম

12
আইএমও সক্রিয়ভাবে করা ভুল কাজ। শিরোনামগুলি অন্য শিরোনামগুলি অন্তর্ভুক্ত করা উচিত যখন তারা এগুলি ছাড়া কাজ না করে। আর তুমি আছে A.hএবং B.hউভয় উপর নির্ভর করে যে C.hএবং আপনি অন্তর্ভুক্ত A.hএবং B.h, কারণ আপনি উভয়, আপনি হবে অন্তর্ভুক্ত C.hদুইবার, কিন্তু যে, জরিমানা কারণ কম্পাইলার এটা দ্বিতীয় সময় এড়িয়ে যাবে এবং যদি আপনি না, মনে আছে চাই সবসময় অন্তর্ভুক্ত C.hসামনে A.hবা B.hআরো অনেক কিছু বেহুদা ইনক্লুশান আপ শেষ।
জান হুডেক

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

3

পিসি-লিন্ট সত্যিই এটি করতে পারে। এটি করার একটি সহজ উপায় হ'ল কেবল অব্যবহৃত ফাইলগুলি সনাক্ত করতে এটি কনফিগার করা এবং অন্যান্য সমস্ত সমস্যা উপেক্ষা করুন। এটি বেশ সহজবোধ্য - কেবলমাত্র 766 বার্তাটি সক্ষম করতে ("শিরোনামের ফাইল মডিউলটিতে ব্যবহৃত হয় না"), কেবল কমান্ড লাইনে -w0 + e766 বিকল্পগুলি অন্তর্ভুক্ত করুন।

একই বার্তা সম্পর্কিত বার্তাগুলির সাথেও ব্যবহার করা যেতে পারে যেমন 964 ("শিরোনামের ফাইলটি মডিউলটিতে সরাসরি ব্যবহৃত হয় না") এবং 966 ("মডিউলে অপ্রত্যক্ষভাবে অন্তর্ভুক্ত শিরোলেখ ফাইলটি নেই")।

এফডাব্লুআইডাব্লু আমি গত সপ্তাহে http://www.riverblade.co.uk/blog.php?archive=2008_09_01_archive.xml#3575027665614976318 এ একটি ব্লগ পোস্টে আরও বিস্তারিতভাবে এ সম্পর্কে লিখেছি ।


2

আপনি অপ্রয়োজনীয় অপসারণ করতে খুঁজছি হয় #includeঅর্ডার বিল্ড বার হ্রাস ফাইল, আপনার সময় এবং অর্থ ভাল আপনার বিল্ড প্রক্রিয়া ব্যবহার করে parallelizing অতিবাহিত করা যেতে পারে cl.exe / এমপি , -J করা , Xoreax IncrediBuild , distcc / আইসক্রিম ইত্যাদি

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


2

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

প্রত্যেকটি অন্তর্ভুক্ত এবং উত্স ফাইলের জন্য, প্রতিটি একবারে ফাইল অন্তর্ভুক্ত করে মন্তব্য করুন এবং দেখুন এটি সংকলন করে কিনা।

অন্তর্ভুক্ত ফাইলগুলিকে বর্ণমালা অনুসারে বাছাই করাও একটি ভাল ধারণা এবং যেখানে এটি সম্ভব নয় সেখানে একটি মন্তব্য যুক্ত করুন।


4
আমি খুব নিশ্চিত নই যে এই মন্তব্যটি কতটা বাস্তব, যদি খুব বড় সংখ্যক বাস্তবায়ন ফাইল জড়িত থাকে।
সনি

1

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

#define WIN32_LEAN_AND_MEAN
#define VC_EXTRALEAN

Http://support.microsoft.com/kb/166474 দেখুন


4
উভয়ের প্রয়োজন নেই - ভিসি_আরেক্টরালেয়ান WIN32_LEAN_AND_MEAN
রায়ান

1

আপনি যদি ইতিমধ্যে না থাকেন তবে আপনি যে পরিবর্তন করতে যাচ্ছেন না এমন সমস্ত কিছু অন্তর্ভুক্ত করার জন্য একটি পূর্বনির্ধারিত শিরোলেখ ব্যবহার করে (প্ল্যাটফর্ম শিরোনাম, বাহ্যিক এসডিকে শিরোনাম, বা আপনার প্রকল্পের স্থির ইতিমধ্যে সম্পন্ন টুকরা) বিল্ড টাইমগুলিতে একটি বিশাল পার্থক্য আনবে।

http://msdn.microsoft.com/en-us/library/szfdksca(VS.71).aspx

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


প্রাকম্পম্পাইল্ড শিরোনামগুলির দুর্দান্ত ব্যাখ্যা: সাইগনাসসসফটওয়্যার / পেপারস / প্রম্পম্পাইলহেডারস html ( ভিজুয়ালস্টুডিওর সাম্প্রতিক সংস্করণগুলিতে অটোজেনারেটিং প্রম্পম্পাইল্ড হেডারগুলি নষ্ট হয়েছে কিনা তা নিশ্চিত নয়, তবে এটি চেক করার যোগ্য))
ইডব্রি

1

আপনি যদি Eclipse CDT এর সাথে কাজ করেন তবে আপনার অন্তর্ভুক্ত কাঠামোটি অনুকূল করে তোলার জন্য http://includator.com ব্যবহার করে দেখতে পারেন। যাইহোক, ইনক্লুডেটর ভিসি ++ এর পূর্বনির্ধারিত অন্তর্ভুক্ত সম্পর্কে পর্যাপ্ত পরিমাণে জানতে না পারে এবং ভিসি ++ সহ সঠিক অন্তর্ভুক্ত ব্যবহারের জন্য সিডিটি স্থাপন করা এখনও সিডিটিতে অন্তর্নির্মিত নয়।


1

সর্বশেষ জেটব্রাইন আইডিই, ক্লিওন স্বয়ংক্রিয়ভাবে (ধূসরতে) বর্তমান ফাইলটিতে ব্যবহৃত হয় না এমনগুলি অন্তর্ভুক্ত করে।

আইডিই থেকে সমস্ত অব্যবহৃত (এবং এছাড়াও ফাংশন, পদ্ধতি ইত্যাদি) অন্তর্ভুক্ত রয়েছে এমন তালিকা থাকাও সম্ভব।


0

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


আপনি কেবল বলতে পারেন "কোন # টি অন্তর্ভুক্ত রয়েছে তা স্থগিত করা সমস্যার সমাধানের সমান Good শুভকামনা :)" অবশ্যই আপনি হিউরিস্টিক্স ব্যবহার করতে পারেন তবে আমি এমন কোনও মুক্ত সফ্টওয়্যার সম্পর্কে জানি না যা এটি করে।

0

সম্ভবত কিছুটা দেরি হয়ে গেছে, তবে আমি একবার একটি ওয়েবকিট পার্ল স্ক্রিপ্ট পেয়েছি যা আপনি যা চান ঠিক তেমন করে। এটি বিশ্বাস করার জন্য আমার কিছু মানিয়ে নেওয়ার প্রয়োজন হবে (আমি পার্ল সম্পর্কে ভাল পারদর্শী নই) তবে এটি কৌশলটি করা উচিত:

http://trac.webkit.org/browser/branches/old/safari-3-2-branch/WebKitTools/Scriptts/find-extra- অন্তর্ভুক্ত

(এটি একটি পুরানো শাখা কারণ ট্রাঙ্কের ফাইলটি আর নেই)


0

যদি এমন কোনও নির্দিষ্ট শিরোনাম থাকে যা আপনার মনে হয় যে আর প্রয়োজন হয় না (স্ট্রিং। H) বলুন তবে আপনি মন্তব্য করতে পারেন যা অন্তর্ভুক্ত রয়েছে এবং এরপরে এটি অন্তর্ভুক্ত করে সমস্ত নীচে রাখুন:

#ifdef _STRING_H_
#  error string.h is included indirectly
#endif

অবশ্যই আপনার ইন্টারফেস শিরোনামগুলি সিপিপি মেমরিতে তাদের অন্তর্ভুক্তি রেকর্ড করতে একটি ভিন্ন # সংজ্ঞায়িত কনভেনশন ব্যবহার করতে পারে। বা কোনও কনভেনশন নেই, এই ক্ষেত্রে এই পদ্ধতির কাজ হবে না।

তারপরে পুনর্নির্মাণ করুন। তিনটি সম্ভাবনা রয়েছে:

  • এটা ঠিক আছে। স্ট্রিং.হ. সংকলন-সমালোচক ছিল না, এবং এর জন্য অন্তর্ভুক্ত থাকা সরিয়ে ফেলা যায়।

  • # অরর ট্রিপস। স্ট্রিং.এম.কে কোনওভাবে পরোক্ষভাবে অন্তর্ভুক্ত করা হয়েছিল আপনি এখনও জানেন না যে স্ট্রিং.হ প্রয়োজন হয় কিনা। যদি এটির প্রয়োজন হয়, আপনার সরাসরি এটি অন্তর্ভুক্ত করা উচিত (নীচে দেখুন)।

  • আপনি অন্য কিছু সংকলন ত্রুটি পান। স্ট্রিং.ইচ প্রয়োজন ছিল এবং অপ্রত্যক্ষভাবে অন্তর্ভুক্ত করা হচ্ছে না, তাই এর সাথে শুরু হওয়া সঠিক ছিল correct

মনে রাখবেন যে যখন আপনার .h বা .c সরাসরি অন্য কোনও ব্যবহার করে তখন অপ্রত্যক্ষ অন্তর্ভুক্তির উপর নির্ভর করে আপনি প্রায়শই একটি বাগ হন: আপনি কার্যকরভাবে প্রতিশ্রুতি দিচ্ছেন যে আপনি যে কোডটি ব্যবহার করছেন অন্য কোনও হেডার যতক্ষণ লাগবে ততক্ষণ আপনার কোডটিকে সেই শিরোনামের প্রয়োজন হবে, যা সম্ভবত আপনি বোঝাতে চেয়েছিলেন না

সাবধানতাগুলি শিরোনাম সম্পর্কে অন্যান্য উত্তরে উল্লিখিত যে আচরণগুলি পরিবর্তিত করে বরং এটি বলে যে বিল্ডিং ব্যর্থতার কারণ হিসাবে জিনিসগুলি এখানে প্রয়োগ হয়।

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