সি / সি ++ তে অতিমাত্রায় # অন্তর্ভুক্তগুলি সনাক্ত করা হচ্ছে?


289

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

এমন কি এমন কোনও সরঞ্জাম রয়েছে যা অতিরিক্ত অতিরিক্ত # নির্দেশাবলী সনাক্ত করতে পারে এবং আমি কোনটি নিরাপদে অপসারণ করতে পারি তার পরামর্শ দিতে পারি?
লিন্ট সম্ভবত এটি করে না?



1
লিঙ্কযুক্ত প্রশ্নটি কেবল উইন্ডোজটিতে বিশেষত ভিজ্যুয়াল স্টুডিও ব্যবহার করে সমস্যাটি সমাধান করবে বলে মনে হয়।
ডি'নবরে

7
ডুপ্লিকেটটি বিশেষত ভিজ্যুয়াল স্টুডিওটি ব্যবহার করার বিষয়ে এটি পুনরায় খুলতে ভোট দেওয়া।
ড্রু ডোরম্যান

উত্তর:


42

এটি স্বয়ংক্রিয় নয়, তবে ডক্সিজেন#included ফাইলগুলির জন্য নির্ভরতা ডায়াগ্রাম তৈরি করবে । আপনাকে তাদের দৃষ্টিভঙ্গি দিয়ে যেতে হবে, তবে কী কী ব্যবহার করছে তার চিত্র পাওয়ার জন্য তারা খুব কার্যকর হতে পারে।


5
এটি শৃঙ্খলা দেখার দুর্দান্ত উপায় .. এ -> বি -> সি -> ডি এবং এ -> ডি অবিলম্বে অপ্রয়োজনীয়তা প্রকাশ করে।
টম

34
@ টম: এটি একটি ভয়াবহ আইডিয়া: এটির জন্য এটি প্রমাণিত হয় না যেগুলির অন্তর্ভুক্তগুলির প্রয়োজন রয়েছে কিনা এবং দ্বিতীয়টি, অন্তর্ভুক্তগুলির তালিকাগুলি পরোক্ষ অন্তর্ভুক্তগুলির উপর নির্ভর করবে না যা ভবিষ্যতে পরিবর্তিত হতে পারে (রিডানড্যান্ট অন্তর্ভুক্তগুলি সাধারণত এমন হয় না যাইহোক বড় সমস্যা, রক্ষী এবং সংকলক যাদু অন্তর্ভুক্ত করার জন্য ধন্যবাদ) তবে কোন শ্রেণিতে / ফাংশনগুলি ফাইলে প্রকৃতপক্ষে ব্যবহৃত হয় (আপনার সংকলকটি কয়েক হাজার লাইনের টেম্পলেট কোডের মধ্য দিয়ে যেতে হবে না যা এমনকি তাত্ক্ষণিকভাবে আসে না)
মাইক এমবি

@ অ্যালবার্ট, আপনি কি এর স্ক্রিনশটগুলি অন্তর্ভুক্ত করতে পারেন এবং সংক্ষিপ্তভাবে বর্ণনা করতে পারেন যে ডক্সিজেন আউটপুটটিতে কোথায় ক্লিক করবেন?
গ্যাব্রিয়েল স্টেপলস

@ গ্যাব্রিয়েল স্ট্যাপলস এটি আমার উত্তর নয়, তাই আমি এতে তথ্য যুক্ত করতে চাই না। আমি কেবলমাত্র লিঙ্কটি সংশোধন করেছি (হোস্টিংয়ের জায়গা হিসাবে এটি ব্যবহার করা বন্ধ / জব্দ করা হিসাবে উল্লেখ করা হয়েছে)।
অ্যালবার্ট

177

গুগলের সিপ্প্লেয়ান (লিঙ্ক: ডাউনলোড , ডকুমেন্টেশন ) বিভিন্ন ধরণের সি ++ সমস্যার সন্ধান করতে পারে এবং এটি এখন অতিরিক্ত অতিরিক্ত # অন্তর্ভুক্ত খুঁজে পেতে পারে।

এছাড়াও একটি ঝনঝন-ভিত্তিক সরঞ্জাম রয়েছে , আপনি কী ব্যবহার করেন তা অন্তর্ভুক্ত করে যা এটি করতে পারে। অন্তর্ভুক্ত-আপনি কী ব্যবহার করবেন তা আগাম ঘোষণার প্রস্তাব দিতে পারে (যাতে আপনার এত # অন্তর্ভুক্ত করতে হবে না) এবং #চ্ছিকভাবে আপনার জন্য আপনার # অন্তর্ভুক্তগুলি পরিষ্কার করুন clean

Eclipse CDT- র বর্তমান সংস্করণগুলিতেও এই কার্যকারিতাটি অন্তর্নিহিত রয়েছে: উত্স মেনুতে যাওয়া এবং অর্গানাইজড ইনক্লুডস ক্লিক করা আপনার # টির অন্তর্ভুক্তকে বর্ণমালা করবে, যে কোনও শিরোনামকেই গ্রহণ করবে যা Eclipse মনে করে যে আপনি সরাসরি না ছাড়াই ব্যবহার করছেন এবং কোনও শিরোনাম তা মন্তব্য করে না আপনার মনে হয় না। তবে এই বৈশিষ্ট্যটি 100% নির্ভরযোগ্য নয়।


2
এটা এখন। আমি কেবল এটি ব্যবহার শুরু করি। আমার নোট এখানে দেখুন। stackoverflow.com/questions/1301850/...
সম্ভাবনা

1
সিপ্লেক্লান সংগ্রহস্থলটি নিচে রয়েছে, আপনি এখন এটি এখানে পেতে পারেন: bitbucket.org/robertmassaioli/cppclean (যদিও মূল সাইটটি কিছু উদাহরণ ব্যবহারের জন্য এখনও কার্যকর)
নিক

3
আমি রক্ষণাবেক্ষণ করা সিপ্লেক্লেন কাঁটাচামড়ার লিঙ্কটি আপডেট করেছি: github.com/myint/cppclean
বেনসি

1
নোট করুন যে সিপিপ্লেইন এগুলি কেবলমাত্র শিরোনামের ফাইলগুলিতে, সিপিপি ফাইলগুলিতে সন্ধান করতে পারে বলে মনে হয়: "অযৌক্তিক # শিরোলেখের ফাইলগুলিতে অন্তর্ভুক্ত"।
জিতরেক্স

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

65

এছাড়াও আপনি কী ব্যবহার করেন তা অন্তর্ভুক্ত করে দেখুন , যা একই সমস্যাটি সমাধান করে।


6
এই উত্তরটির আরও অনেকগুলি প্রয়োজনীয়তা প্রয়োজন, যেহেতু একবার কিঙ্কস শেষ হয়ে গেলে গুগলের আইডাব্লুওয়াইইউ সরঞ্জামটি এই কাজের জন্য নির্ধারিত সরঞ্জাম হয়ে উঠবে।
ড্যান ওলসন

5
sudo apt-get ইনস্টল iwyu
অ্যান্ড্রু ওয়াগনার

দুর্দান্ত দেখে মনে হচ্ছে - দুটি ক্যাভেটের সাথে 1) শেষ আপডেট 21 ফেব্রুয়ারী 2106 2) গোগোলে এগুলি কেবল সি ++ এর জন্য ব্যবহার করে, সি নয়, যা ওপি অনুরোধ করেছিল।
মাওগ বলছেন মনিকা সপ্তম

কোনও ব্যবহারকারীর এটি কীভাবে ব্যবহার করা উচিত তা আপনি একটু ব্যাখ্যা করতে পারেন? পাইথন স্ক্রিপ্টের আউটপুট কী রয়েছে সে সম্পর্কে README খুব স্পষ্ট নয়।
কিং এর জেস্টার

আমি এটি ব্যবহার করছি, তবে এটি সর্বদা 100% সঠিক নয়। হতে পারে 70% বার এটি সঠিক পরামর্শ দেয়।
ইনকিউসিটিভ

25

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

লিন্ট হ'ল স্টাইলের পরীক্ষক এবং অবশ্যই এটির সম্পূর্ণ ক্ষমতা নেই।

আমি মনে করি আপনি অতিমাত্রায় অন্তর্ভুক্ত অন্তর্ভুক্ত সনাক্তকরণের একমাত্র উপায় স্যুটগুলি সরিয়ে, সংকলন এবং চালনা করতে পারবেন।


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

9
@ ডেভিড, হ্যাঁ তবে এটি সঠিকভাবে করার আগে আপনি ডিভসের বছরগুলিতে নির্ভর করেন। আমি খুব
দৃ with়তার

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

আমি ঠিক এর বিপরীতে বলতে চাই। আপনার যা দরকার তা হ'ল টাইপ নির্ভরতা পরীক্ষক। আপনি সেই অনুযায়ী সাজানোর পরে এটি সংকলন নাও করতে পারেন, তবে এগুলি যে কোনও উপায়েই মোকাবেলা করা উচিত are
বেনোয়েট

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

15

আমি ভেবেছিলাম যে পিসিলিন্ট এটি করবে, তবে কয়েক বছর হয়ে গেছে যখন আমি এটি দেখেছি। আপনি এটি পরীক্ষা করে দেখতে পারেন।

আমি এই ব্লগটি দেখেছি এবং লেখক অব্যবহৃত অন্তর্ভুক্তগুলি সন্ধানের জন্য পিসিএলিন্ট কনফিগার করার বিষয়ে কিছুটা কথা বলেছেন talked এক নজর মূল্যবান হতে পারে।


গুড ফাইন্ড! আমি এটি ব্যবহার করতে হবে।
ক্র্যাশমাস্টার

4
আমি নিয়মিত পিসিএলিন্ট ব্যবহার করি এবং এটি আমাকে অব্যক্ত শিরোনাম সম্পর্কে বলে। আমি শিরোনামটি # অন্তর্ভুক্ত করে মন্তব্য করতে আগ্রহী এবং পুনরায় সংকলন করে শিরোনামটি সত্যই অব্যবহৃত হয়েছে তা নিশ্চিত করার জন্য ...
হ্যারল্ড বামফোর্ড

নিশ্চিতকরণের জন্য ধন্যবাদ, হ্যারল্ড
itmatt

5
অনেক দামি. জনসাধারণের জন্য কার্যকর একটি সরঞ্জাম নয়।

7

CScout refactoring ব্রাউজার অতিরিক্ত সি (দুর্ভাগ্যবশত না সি ++) কোডে নির্দেশনা অন্তর্ভুক্ত সনাক্ত করা সম্ভব। আপনি এই জার্নাল নিবন্ধে এটি কীভাবে কাজ করে তার একটি বর্ণনা পেতে পারেন ।


5

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

এটি রাতের বেলা চলতে দিন এবং পরের দিন আপনার কাছে থাকা ফাইলগুলি অন্তর্ভুক্ত করার জন্য আপনার 100% সঠিক তালিকা থাকবে।

কখনও কখনও নিষ্ঠুর শক্তি কেবল কাজ করে :-)


সম্পাদনা করুন: এবং কখনও কখনও এটি :-) হয় না। মন্তব্যগুলি থেকে কিছুটা তথ্য এখানে দেওয়া হয়েছে:

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

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

হতে পারে এটিই আপনি বোঝাতে চেয়েছিলেন তবে একটি স্ক্রিপ্ট যা কোনও একককে সরিয়ে দেয় এবং শেষ সরিয়ে ফেলা যদি তা সফলভাবে সরিয়ে ফেলা হয় তবে তা অন্তর্ভুক্ত করে তা কৌতুকটি করবে।
ডমিনিক রজার

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

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

2
এটি এমন শনাক্ত করবে না যেখানে আপনি এমন একটি শিরোলেখকে অন্তর্ভুক্ত করছেন যার মধ্যে আপনার সত্যই প্রয়োজনীয় শিরোনাম অন্তর্ভুক্ত রয়েছে।
bk1e

5

এখানে (পুনরায়) পোস্ট করার জন্য দুঃখিত, লোকেরা প্রায়শই মন্তব্যগুলি প্রসারিত করে না।

আমার মন্তব্য ক্র্যাশমিস্টারে পরীক্ষা করুন, ফ্লেক্সিলিন্ট / পিসি-লিন্ট আপনার জন্য এটি করবে। তথ্যমূলক বার্তা 766. আমার ম্যানুয়ালটির বিভাগ 11.8.1 (সংস্করণ 8.0) এটি আলোচনা করে।

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


আপনি ঠিক কী বলতে চেয়েছিলেন তা আমি জানি এবং আমার প্রতিক্রিয়াটি ছিল "ইওউউইউউইউভিউ"। আমি এর মত কোড ঘৃণা করি।
ডেভিড থর্নলি

5

আমি কখনও এমন একটি পূর্ণাঙ্গ সরঞ্জাম খুঁজে পাইনি যা আপনি যা চান তা পূরণ করে। আমি যে নিকটতম জিনিসটি ব্যবহার করেছি তা হ'ল ইনক্লুডম্যানেজার , যা আপনার শিরোনাম অন্তর্ভুক্তি গাছকে গ্রাফ দেয় যাতে আপনি দৃশ্যমানভাবে কেবল একটি ফাইল এবং বৃত্তাকার শিরোনাম অন্তর্ভুক্তিতে অন্তর্ভুক্ত শিরোনামগুলি দেখতে পারেন spot


4

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

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

স্বয়ংক্রিয় সরঞ্জামগুলি এটিকে ভুল করতে পারে তার মধ্যে একটি:

এএইচপ্পিতে:

class A { 
  // ...
};

বিএইচপি তে:

#include "A.hpp

class B {
    public:
        A foo;
};

সি সি পি পি তে:

#include "C.hpp"  

#include "B.hpp"  // <-- Unneeded, but lint reports it as needed
#include "A.hpp"  // <-- Needed, but lint reports it as unneeded

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

আমি ভিতরে থেকে ব্লগ গেমস থেকে শারীরিক কাঠামো এবং সি ++ এই নিবন্ধটি সুপারিশ করছি । তারা # অন্তর্ভুক্ত জগাখিচির পরিষ্কার করার জন্য একটি বিস্তৃত পদ্ধতির প্রস্তাব দেয়:

নির্দেশিকা

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

  1. প্রতিটি সিপিপি ফাইলের নিজস্ব শিরোনাম ফাইলটি প্রথমে অন্তর্ভুক্ত থাকে। [স্নিপ]
  2. একটি শিরোনাম ফাইল অবশ্যই পার্স করার জন্য প্রয়োজনীয় সমস্ত হেডার ফাইল অন্তর্ভুক্ত করে। [স্নিপ]
  3. একটি শিরোনাম ফাইলে পার্স করার জন্য প্রয়োজনীয় ন্যূনতম সংখ্যক হেডার ফাইল থাকতে হবে files [স্নিপ]

সংকলক প্রযুক্তিতে তাঁর পুরানো পর্যবেক্ষণগুলি বাদ দিয়ে লাকোসের বইটি শিক্ষার জন্য দুর্দান্ত।
টম

4

আপনি যদি এক্লিপ্স সিডিটি ব্যবহার করে থাকেন তবে আপনি http://includator.com ব্যবহার করতে পারেন যা বিটা পরীক্ষকদের জন্য বিনামূল্যে (এই লেখার সময়) এবং স্বয়ংক্রিয়ভাবে অতিরিক্ত অতিরিক্ত # অন্তর্ভুক্ত করে বা নিখোঁজগুলিকে যুক্ত করে। যাদের ফ্লেক্সিলিন্ট বা পিসি-লিন্ট রয়েছে এবং এলিক্স সিডিটি ব্যবহার করছে তাদের জন্য, http://linticator.com একটি বিকল্প হতে পারে (বিটা পরীক্ষার জন্যও বিনামূল্যে)। যদিও এটি লিন্টের বিশ্লেষণ ব্যবহার করে, অযৌক্তিক # অন্তর্ভুক্ত বিবৃতিগুলিকে স্বয়ংক্রিয়ভাবে সরানোর জন্য এটি দ্রুত-সংশোধন করে।


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

2

এই নিবন্ধটি ডোজিজেনের বিশ্লেষণ ব্যবহার করে # মুছে ফেলার একটি কৌশল ব্যাখ্যা করে। এটি কেবল পার্ল স্ক্রিপ্ট, তাই এটি ব্যবহার করা বেশ সহজ।


1
স্ক্রিপ্টটি মুছে ফেলার জন্য কিছু অন্তর্ভুক্ত করে তবে এটি মুছে ফেলা যায় না এমন প্রচুর পরিমাণেও দেয়। দেখে মনে হচ্ছে এটি শ্রেণি এনামকে সমর্থন করে না, মনে হয় এটির ম্যাক্রো এবং কখনও কখনও নেমস্পেসের সাথে খারাপ সময় রয়েছে।
ব্যাপটিস্ট উইচট

1

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

http://trac.webkit.org/browser/branches/old/safari-3-2-branch/WebKitTools/Scripts/find-extra-includes

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



1

অতিরিক্ত ধরণের # অন্তর্ভুক্ত ফাইল দুটি ধরণের রয়েছে:

  1. মডিউলের (.c, .cpp) মোটেও প্রয়োজন নেই এমন একটি শিরোনাম ফাইল
  2. একটি শিরোনাম ফাইল মডিউল দ্বারা প্রয়োজন তবে একাধিকবার সরাসরি বা অপ্রত্যক্ষভাবে অন্তর্ভুক্ত করা হচ্ছে।

আমার অভিজ্ঞতাতে 2 টি উপায় রয়েছে যা এটি সনাক্ত করতে ভাল কাজ করে:

  • gcc -H বা cl.exe / showincludes (সমস্যার সমাধান 2)

    বাস্তব বিশ্বে, আপনি যদি মেকফিলের সিএফএলএজিএস বিকল্পগুলিকে ওভাররাইড না করে থাকেন তবে আপনি তৈরি করার আগে সিএফএলএগএস = -H রফতানি করতে পারেন। অথবা যেমনটি আমি ব্যবহার করেছি, আপনি H (সিসি) এবং $ (সিএক্সএক্স) এর প্রতিটি অনুরোধে জোর করে -H বিকল্পগুলি যুক্ত করতে একটি সিসি / জি ++ র‌্যাপার তৈরি করতে পারেন। এবং মোড়কের ডিরেক্টরিটিকে $ PATH ভেরিয়েবলে প্রেন্ডেন্ড করুন, তারপরে আপনার মেকিং সমস্ত পরিবর্তে আপনাকে মোড়কের কমান্ডটি ব্যবহার করবে। অবশ্যই আপনার মোড়কের আসল জিসিসি সংকলকটি চাওয়া উচিত। যদি আপনার মেকফিল সরাসরি জিসিসি ব্যবহার করে তবে এই কৌশলগুলি পরিবর্তন করতে হবে। $ (সিসি) বা $ (স্যাক্সএক্স) এর পরিবর্তে বা অন্তর্নিহিত বিধি দ্বারা।

    কমান্ড লাইনের সাথে টুইট করে আপনি একটি একক ফাইলও সংকলন করতে পারেন। তবে আপনি যদি পুরো প্রকল্পটির জন্য শিরোনাম পরিষ্কার করতে চান। আপনি এর মাধ্যমে সমস্ত আউটপুট ক্যাপচার করতে পারেন:

    পরিষ্কার করা

    2> & 1 করুন tee.txt

  • পিসি-লিন্ট / ফ্লেক্সিলিন্ট (1 এবং 2 উভয়ই সমস্যার সমাধান করুন)

    নিশ্চিত করুন যে + e766 বিকল্পগুলি যুক্ত করুন, এই সতর্কতাটি প্রায়: অব্যবহৃত হেডার ফাইল।

    প্লেইন্ট / ফ্লিন্ট-ভিএফ ...

    এটি প্লেইন্ট আউটপুট অন্তর্ভুক্ত শিরোলেখ ফাইলগুলির কারণ করবে, নেস্টেড শিরোনাম ফাইলগুলি যথাযথভাবে ইন্টেন্ট করা হবে।


1

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


5
আমি কি "সর্বদা সঠিক" সমাধান চেয়েছি? এই উত্তরটি আলোচনার জন্য খুব কার্যকর নয়।
shosh

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

4
এটি কতটা কঠিন হবে এবং আপনি কীভাবে একটি বাধা বা অন্য কোনও সমস্যার সমাধান করতে পারেন সে সম্পর্কে সমস্ত স্পেসিফিকেশনের মধ্যে আমি আপনাকে একমাত্র 100% সঠিক উত্তর দিয়েছি। আমি এটির পক্ষে
অবজ্ঞাহীন

1
আমার মনে আছে যে রাইসের উপপাদ্যটিতে বলা আছে "এমন কোনও প্রোগ্রাম হতে পারে না যা সর্বদা পরীক্ষা করতে পারে যে কোনও প্রদত্ত প্রোগ্রাম এই অতিরিক্ত-অন্তর্ভুক্ত সমস্যার সমাধান করে কিনা"। কয়েকটি প্রোগ্রাম থাকতে পারে যা অতিরিক্ত-অন্তর্ভুক্ত সমস্যা সমাধান করে।
heে ইয়াং

1
ব্যক্তিগতভাবে আমি @ অ্যালগোম্যানের ইনপুটটিকে খুব সহায়ক বলে মনে করেছি। আমাকে বুঝতে যে এই সমস্যাটি কতটা কঠিন makes
বোগার্ডন

1

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

স্ক্রিপ্ট GitHub থেকে সরাসরি অ্যাক্সেস করতে পারবেন।


0

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

সম্পাদনা: এটি পারে। দেখুন itsmatt এর উত্তর


তুমি কি সে সম্পর্কে নিশ্চিত ? আমি সি ++ কোডে কয়েক বছরে ফ্লেক্সিলিন্ট (পিসিএলের মতোই) ব্যবহার করি নি, তবে সি কোডেও সম্প্রতি আমি শপথ করতে পারি যে অব্যবহৃত হেডার ফাইলগুলি সম্পর্কে আমি কয়েকটি বার্তা (আমার মনে হয় এটি কোড 76 766?) দেখেছি। সবেমাত্র চেক করা হয়েছে (v8.0), বিভাগ 11.8.1 দেখুন। ম্যানুয়াল
ড্যান

0

ক্লিওন , জেটব্রেইনস থেকে সি / সি ++ আইডিই, রিডানড্যান্ট সনাক্ত করে যা বাক্সের বাইরে রয়েছে। এগুলি সম্পাদকীয় গ্রেড আউট, তবে বর্তমান ফাইল বা পুরো প্রকল্পের অন্তর্ভুক্ত অনুকূলকরণের জন্য কার্যাদিও রয়েছে

আমি খুঁজে পেয়েছি যে আপনি এই কার্যকারিতাটির জন্য অর্থ প্রদান করেছেন; ক্লায়োনান আপনার প্রকল্পটি প্রথমবার লোড হওয়ার পরে স্ক্যান করতে এবং বিশ্লেষণ করতে কিছু সময় নেয়।

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