একজন সি প্রোগ্রামারকে কী জানা উচিত? [বন্ধ]


12

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


9
স্ট্যাক ওভারফ্লো এর সি প্রশ্নগুলি দিয়ে শুরু করুন এবং দেখুন যা কিছু আপনার জানা নেই।
খ্রিস্টিয়াকক

3
এসি প্রোগ্রামার সম্ভবত এটি জানতে হবে2 + 2 = 4
এডওয়ার্ড স্ট্রেঞ্জ

21
বুলেট-প্রুফ জুতা বিক্রি করে এমন কোনও স্টোর সম্পর্কে তাদের জানা উচিত।
অ্যাডাম ক্রসল্যান্ড

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

2
আর একটি প্রোগ্রামিং ভাষা?
মুহাম্মদ আলকারৌরি

উত্তর:


19

নির্দিষ্ট সি? বেশিরভাগ প্রক্রিয়াগত ভাষাগুলির কাছে সাধারণ কাঠামোগুলি বাদ দিয়ে, আমাকে বলতে হবে:

  • (আব) প্রাকপ্রসেসর ব্যবহার করে
  • লিঙ্কার বনাম সংকলক
  • পয়েন্টার পয়েন্টার পয়েন্টার!
  • অ্যারে পয়েন্টারগুলি কীভাবে অ্যারে হয়
  • সি স্ট্রিংগুলি কীভাবে কাজ করে এবং কীভাবে সেগুলি পয়েন্টার এবং অ্যারে হয়
  • কতটা খারাপ সি স্ট্রিং ব্যবহার বাফার ওভারফ্লোতে পরিণতি পেতে পারে
  • যে কোনও কিছুতে কীভাবে কাস্ট করা যায় (সর্বোপরি এটি কেবল 1s এবং 0 সে :) :)
  • ম্যানুয়াল মেমরি ম্যানেজমেন্ট ম্যালোক / ফ্রি
  • স্ট্যাক বনাম গাদা
  • পয়েন্টার এলিয়াসিং, (কেন এটি সি অবৈধ)
  • কঠোর শ্রেণীর পরিবর্তে প্রকাশ্যে প্রকাশিত ফাংশনগুলির একটি সেট সহ মডিউলগুলির (.h / .c ফাইল) এর ক্ষেত্রে বিকাশের বিষয়ে চিন্তাভাবনা
  • ইউনিয়ন
  • স্প্রিন্টফ কেন আপনার পা উড়িয়ে দিতে পারে
  • ফাংশন পয়েন্টার

আমি তালিকায় "বাফার ওভারফ্লো" যুক্ত করব।
আইডন কুলি

অ্যাডান, ভাল ক্যাচ যোগ করা হয়েছে।
ডগ টি।

2
সি অ্যারে এবং পয়েন্টার কীভাবে এক নয়: Books.google.ca/…
ম্যাথিউউ

পয়েন্টারগুলি কমপক্ষে 3 গুণ বেশি বার করা উচিত ছিল
গৌরব

8

পয়েন্টারগুলি বুঝুন এবং আপনি কম্পিউটারগুলি বুঝতে পারবেন।


12
নাহ, আপনি কেবল কম্পিউটারগুলি বুঝতে পারছেন এমন একটি বিভ্রম পাবেন।
কাজ

5

পাইথাগ্রাসের দুর্দান্ত উত্তর ছাড়াও,

কীভাবে জটিল ঘোষণাগুলি লিখবেন (বা কমপক্ষে পড়ুন) char (*(*funcs[4])())[10]

ফানকস হ'ল বিন্যাসে অ্যারে [4] ফাংশনে ফিরতি পয়েন্টার [10] এর অ্যারে [10]


1
যদি এটি এত জটিল হয়ে যায়, সম্ভবত এটি কোনও মন্তব্যে অন্তর্ভুক্ত?
কাজ

7
সম্ভবত তার মতো লেখা এড়ানো কীভাবে শিখানো উচিত?
ফ্যাবিবিবি

3
  1. পূর্ণসংখ্যা প্রচারের নিয়ম
  2. সবকিছুকে একটি পরিচিত মান থেকে শুরু করুন
  3. বিশেষত ব্যতিক্রমগুলি / ব্যর্থতাগুলি হ্যান্ডেল করার জন্য যখন ব্যবহার করা হয় তখন গোটো মন্দ নয়
  4. malloc এবং / অথবা কলোক NULL ফিরিয়ে দিতে পারে ... আপনার চেক ফেরতের মানগুলি নিশ্চিত করুন
  5. ঘন ঘন ছোট মেমরি বরাদ্দকরণ স্তূপে টুকরো টুকরো করতে পারে।
  6. পয়েন্টার গাণিতিক
  7. বিট মাস্ক আপনার বন্ধু
  8. x >> 1 স্বাক্ষরবিহীন পূর্ণসংখ্যার জন্য x / 2 এর সমান

GOTO খারাপ না হওয়ার জন্য +1 :)
zvrba

2

এসি প্রোগ্রামার জানা উচিত ... অন্যান্য ভাষা! ;-) ওও, ফাংশনাল প্রোগ্রামিং এবং এর মতো বিভিন্ন দৃষ্টান্তের ভাষা অন্যের কাছ থেকে ধারণাগুলি জানা সর্বদা ফলদায়ক।

আরও গুরুতরভাবে, অবলুপ্ত প্রোগ্রামিং প্রতিযোগিতার একটি চেহারা মজাদার এবং কৌতূহলজনকভাবে, একটি ভাল অভিজ্ঞতাও।


2

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

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

void myFn(void) {
    char buf[256];
    gets(buf);
}

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

সি আপনাকে কীভাবে আপনার মেশিনটি কাজ করে সে সম্পর্কে নিম্ন-স্তরের বিশদ সম্পর্কে আপনাকে প্রকাশ করে এবং এটি আপনাকে আজ বিস্তৃত ব্যবহারে অন্য কোনও ব্যবহারকারী-সম্পাদিত ভাষার চেয়ে আপনার মেশিনের উপর আরও সরাসরি নিয়ন্ত্রণ দেয়। দুর্দান্ত শক্তির সাথে দুর্দান্ত দায়িত্ব আসে - সি এর সাথে নিরাপদে এবং কার্যকরভাবে কাজ করার জন্য আপনাকে সেই নিম্ন-স্তরের বিশদগুলি আসলে বুঝতে হবে।


0

অন্যান্য ভাল উত্তরের পাশাপাশি আমি তালিকায় ডিফেন্সিভ প্রোগ্রামিং কৌশল যুক্ত করতে চাই ।

উদাহরণস্বরূপ চুক্তি যাচাই করতে ফাংশনগুলির শুরু / শেষে এ্যাসেটস ব্যবহার করে।

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