সি এর মধ্যে সর্বাধিক সাধারণ নামকরণের সম্মেলনগুলি কী কী?


125

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

  1. GNU / লিনাক্স / কেএন্ডআর লোয়ার_সেস_ফিউশনগুলি সহ
  2. ? নাম? আপার কেসফু ফাংশন সহ

আমি কেবল সি সম্পর্কে এখানে কথা বলছি। আমাদের বেশিরভাগ প্রকল্পগুলি ছোট এমবেডেড সিস্টেম যা আমরা সি ব্যবহার করি are

আমার পরবর্তী প্রকল্পের জন্য আমি এটি ব্যবহার করার পরিকল্পনা করছি:


সি নামকরণ কনভেনশন

Struct              TitleCase
Struct Members      lower_case or lowerCase

Enum                ETitleCase
Enum Members        ALL_CAPS or lowerCase

Public functions    pfx_TitleCase (pfx = two or three letter module prefix)
Private functions   TitleCase
Trivial variables   i,x,n,f etc...
Local variables     lower_case or lowerCase
Global variables    g_lowerCase or g_lower_case (searchable by g_ prefix)

7
আমি গ্লোবাল ভেরিয়েবলগুলিতে একটি 'g_' উপসর্গ জোর করব না; আমি অর্থবহুল নাম প্রয়োগ করব (যাতে ক্লায়েন্ট_লোকেল এবং বিশ্বব্যাপী পরিবর্তনশীল নাম হিসাবে cl_lc নয়)। ক্লাসিক সি উটের ক্ষেত্রে ব্যবহার করে না; আমি সিতে উট-মামলায় কোড লিখেছি এবং এটি অদ্ভুত দেখাচ্ছে (তাই আমি আর এটির মতো করি না)। এটি বলেছিল, এটি ভুল নয় - এবং কোন কনভেনশন ব্যবহৃত হয় তার চেয়ে ধারাবাহিকতা আরও গুরুত্বপূর্ণ। কাঠামো পয়েন্টারগুলি encapsulate যে টাইপডেফগুলি এড়ান; সি স্ট্যান্ডার্ড বিবেচনা করুন - 'FILE *' বানানটি এইভাবে করা হয়, FILE_PTR নয়।
জোনাথন লেফলার

2
@ জোনাথন লেফলার, গ্লোবালগুলি বোঝাতে জি_ এর সাথে কী ভুল? এম্বেড থাকা সিস্টেমে আমার আগে সমস্যা হয়েছিল যার মধ্যে গ্লোবাল ওয়ার্স এবং এক্সটার্নাল জি_সোমেভারের মাধ্যমে আন্তঃ-মডিউল নির্ভরতা ট্র্যাক করা খুব কঠিন। আমি ব্যক্তিগতভাবে মনে করি এটি সাধারণত একটি খারাপ ধারণা, তবে এই ধরণের জিনিসটি সাধারণত কার্য সম্পাদনের কারণে হয়ে যায় done উদাহরণস্বরূপ, একটি বৈশ্বিক পতাকা যা একটি বিঘ্ন দ্বারা সেট করা হয় যে ডেটা প্রস্তুত।
জেফভি

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

3
@ ক্রিস লুৎজ, আমি একমত, পুরো মন দিয়ে। যেখানেই সম্ভব ভার্সেস সংকীর্ণ সুযোগে রাখা উচিত। মনে রাখবেন যে আমরা তিনটি স্কোপ নিয়ে আলোচনা করছি: একটি ফাংশনের স্থানীয়, একটি মডিউল স্থানীয় (ভেরিয়েবলের সাথে কোনও বহিরাগত সংযোগ নেই) এবং বাহ্যিক সংযোগের সাথে গ্লোবাল। এম্বেড থাকা সিস্টেমে "গ্লোবাল টু মডিউল" ভেরিয়েবল থাকা সাধারণ। সুতরাং, বাহ্যিক সংযোগের সাথে গ্লোবালগুলি সনাক্ত করার জন্য যত্ন নিতে হবে যাতে সেগুলি সর্বনিম্ন রাখা যায় এবং মডিউল ইন্টারঅ্যাকশন বুঝতে পারে। "G_" উপসর্গটি এখানে সহায়ক।
জেফভি

46
আমি // এর সাথে বৈশ্বিক পরিবর্তনগুলি উপসর্গ করতে চাই to
প্লাফার

উত্তর:


127

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

  1. ক্যাপগুলিতে সমস্ত ম্যাক্রো এবং ধ্রুবক: MAX_BUFFER_SIZE, TRACKING_ID_PREFIX
  2. নাম এবং টাইপেফের ক্যামেলকেসগুলিতে কাঠামো করুন: GtkWidget, TrackingOrder
  3. স্ট্রাক্টগুলিতে ক্রিয়াকলাপগুলি: ক্লাসিক সি স্টাইল: gtk_widget_show(), tracking_order_process()
  4. পয়েন্টার: কিছুই অভিনব এখানে: GtkWidget *foo, TrackingOrder *bar
  5. গ্লোবাল ভেরিয়েবল: কেবল গ্লোবাল ভেরিয়েবল ব্যবহার করবেন না। তারা খারাপ।
  6. যে কার্যাদি রয়েছে সেখানে কিন্তু সরাসরি ডাকা উচিত নয়, বা অস্পষ্ট ব্যবহার থাকতে পারে বা যা কিছু আছে: শুরুতে এক বা একাধিক আন্ডারস্কোর: _refrobnicate_data_tables(), _destroy_cache()

13
ছয় পয়েন্টে আমি staticমডিউল উপসর্গটি ব্যবহার এবং এড়িয়ে যাওয়া পছন্দ করি , সুতরাং যদি gtk_widget_show()ফাইল স্কোপ সহ কোনও ফাংশন থাকে তবে এটি widget_show()স্ট্যাটিক স্টোরেজ শ্রেণীর সাথে যুক্ত হয়ে সহজ হয়ে যায় ।
আগস্ট কার্লস্ট্রোম

27
Point দফা সম্পর্কে অতিরিক্ত নোট: সি স্ট্যান্ডার্ডের নাম সংরক্ষণের বিষয়ে কিছু নিয়ম রয়েছে যা _প্রয়োগ এবং ভবিষ্যতে ব্যবহারের জন্য শুরু হয় । নামের সাথে শুরু করে কয়েকটি ব্যতিক্রম রয়েছে _তবে আমার মতে এটি মুখস্থ করতে কষ্টের নয়। একটি নিরাপদ নিয়ম হ'ল _আপনার কোড দিয়ে আর কখনও নাম ব্যবহার করা উচিত নয় । প্রাসঙ্গিক সি এফএকিউ এন্ট্রি: c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=decl#namespace
jw013

5
# 2 আরও উচ্চতর ऊটের কেস বা পাস্কেল কেস । উটের কেস বা লোয়ার কেটস প্রথম অক্ষরে লোয়ার কেস ব্যবহার করে।
ক্লিন্ট পাচল

9
স্থানীয় মাল্টি-ওয়ার্ড ভেরিয়েবল সম্পর্কে কী? আমার_ভর নাকি মাইভার?
ডিন গুরভিটজ

4
Global variables: just don't use global variables. They are evil.- আপনি যদি এমবেডড প্রকল্পে কাজ না করেন এবং আপনার 1024 বাইট র‌্যাম এবং 8 মেগাহার্টজ সিপিইউ না থাকে।
কামিল

30

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


29
"পয়েন্টারগুলি গোপন করবেন না" স্টাফগুলির জন্য +1 - যদিও এই উত্তরটি বাকি প্রশ্নের বেশিরভাগ অংশে এখনও সম্বোধন করে না (এখনও)।
জোনাথন লেফলার

1
@ আনউইন্ড, আমি একমত হতে চাই যাইহোক, কখনও কখনও কোনও পয়েন্টারটি বাহ্যিক বিবেচ্য বিষয় হিসাবে চিহ্নিত করা হয় না এবং এটি ব্যবহার করা হবে এমন কাঠামোর প্রকৃত পয়েন্টারের চেয়ে এটি গ্রাহকের কাছে বেশি হ্যান্ডেল। আমি শিরোনামক্যাসপ্রিটারের জন্য যা রেখেছি তা ঠিক। টাইপডেফ স্ট্রাক্ট {ক্ষেত্রগুলি} মাইস্ট্রাক্ট, * মাইস্ট্রাক্টপিটিআর;
জেফভি

আমি শিরোনামক্যাসপ্রিটারটি সরিয়ে দিচ্ছি, এটি আসল প্রশ্ন থেকে বিভ্রান্ত করছে।
জেফভি

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

1
পছন্দ করুন আমি বুঝতে পারছি না বাস্তবায়ন ফাইল সম্পর্কে এত "কেবল" কি, তাও কি কোড নয়? আমি কেবল "বাহ্যিক" নাম সম্পর্কে প্রশ্নের ব্যাখ্যা করি না। সমস্ত কোড কোনও স্তরে "বাস্তবায়ন"।
খোলা

17

ভাল প্রথমত সি এর সরকারী / ব্যক্তিগত / ভার্চুয়াল ফাংশন নেই। এটি সি ++ এবং এর বিভিন্ন কনভেনশন রয়েছে। সি তে সাধারণত:

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

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


@ ক্ল্যাটাস, আমি বুঝতে পারি ব্যক্তিগতভাবে আমার অর্থ এমন ফাংশন যা মডিউল শিরোনামে বাহ্যিকভাবে প্রকাশিত হয় না এবং মডিউলটির বাইরের কোড দ্বারা ব্যবহার করার উদ্দেশ্যে নয়। বাহ্যিকভাবে ব্যবহারের উদ্দেশ্যে জনসাধারণ হ'ল মডিউল API ফাংশন।
জেফভি

3
আপনি স্থির ফাংশনগুলিকে ব্যক্তিগত হিসাবে বিবেচনা করতে পারেন; প্রশ্ন ভার্চুয়াল উল্লেখ করে না। তবে 'সি তে খুব কমই উট-কেস দেখুন' এর জন্য +1।
জোনাথন লেফলার

2
আমি মনে করি জেফ external linkage"পাবলিক ফাংশন" এবং internal linkage"ব্যক্তিগত ফাংশন" এর জন্য বোঝায় ।
pmg

1
আমি পাশাপাশি ধ্রুবককে আক দিয়ে শুরু করে দেখেছি: কেফারসাইজ। কোথা থেকে এসেছে তা নিশ্চিত নয়।
জেফভি

2
ALL_CAPSএনাম মানগুলির জন্য প্রায়শই ব্যবহৃত হয়।
ক্যাফে

14

আপনি জানেন, আমি এটি সহজ, তবে পরিষ্কার রাখতে চাই ... সুতরাং আমি যা ব্যবহার করি তা এখানে সি:

  • তুচ্ছ ভেরিয়েবলগুলি : i,n,cইত্যাদি ... (কেবলমাত্র একটি অক্ষর one একটি বর্ণ যদি পরিষ্কার না হয় তবে এটিকে স্থানীয় পরিবর্তনশীল করুন)
  • স্থানীয় চলক :lowerCamelCase
  • গ্লোবাল ভেরিয়েবলগুলি :g_lowerCamelCase
  • কনস্ট ভেরিয়েবলস :ALL_CAPS
  • পয়েন্টার ভেরিয়েবলস : p_উপসর্গটিতে একটি যুক্ত করুন । গ্লোবাল ভেরিয়েবলের জন্য এটি হবে gp_varস্থানীয় ভেরিয়েবলের p_varজন্য, কনস্ট ভেরিয়েবলের জন্য p_VAR। যদি দূর পয়েন্টার ব্যবহার করা হয় তবে এর fp_পরিবর্তে একটি ব্যবহার করুন p_
  • স্ট্রাক্টস : ModuleCamelCase(মডিউল = সম্পূর্ণ মডিউল নাম, বা একটি 2-3 বর্ণের সংক্ষিপ্তসার, তবে এখনও রয়েছে CamelCase))
  • স্ট্রাক্ট সদস্য ভেরিয়েবলস :lowerCamelCase
  • এনামস :ModuleCamelCase
  • এনাম মানসমূহ :ALL_CAPS
  • জনসাধারণের কার্যাদি :ModuleCamelCase
  • ব্যক্তিগত কাজ :CamelCase
  • ম্যাক্রোস :CamelCase

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

সম্পূর্ণ struct উদাহরণ :

typdef struct TheName TheName;
struct TheName{
    int var;
    TheName *p_link;
};

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

10

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

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

তারপরে, সম্মেলন:

  • কোনও নামই আপনার কাছে কী তা বোঝাতে একটি পঠনযোগ্য বাক্য হতে হবে। "এটি আমার সম্মেলন" এর মতো।
  • তারপরে, একটি বাক্য থেকে কনভেনশন পাওয়ার জন্য 4 টি পদ্ধতি:
    1. THIS_IS_MY_CONVENTION ম্যাক্রো, এনাম সদস্যদের জন্য
    2. ফাইলের নাম, অবজেক্টের নাম (শ্রেণি, কাঠামো, এনাম, ইউনিয়ন ...), ফাংশন নাম, পদ্ধতির নাম, টাইপডেফের জন্য এই আইএসএমইসি কনভেনশন
    3. this_is_my_conferences গ্লোবাল এবং স্থানীয় ভেরিয়েবল,
      পরামিতি, কাঠামো এবং ইউনিয়ন উপাদান
    4. thisismyconvention [ alচ্ছিক ] খুব স্থানীয় এবং অস্থায়ী ভেরিয়েবল (যেমন একটি () লুপ সূচকের মতো)

এবং এটাই.

এটা দেয়

class MyClass {
    enum TheEnumeration {
        FIRST_ELEMENT,
        SECOND_ELEMENT,
    }

    int class_variable;

    int MyMethod(int first_param, int second_parameter) {
        int local_variable;
        TheEnumeration local_enum;
        for(int myindex=0, myindex<class_variable, myindex++) {
             localEnum = FIRST_ELEMENT;
        }
    }
}

8

আমি উটের কেস এবং আন্ডারস্কোর বিচ্ছিন্নকরণের বিরুদ্ধে সুপারিশ করব (যেমন আপনি কাঠামোর সদস্যদের জন্য প্রস্তাব করেছিলেন)। এটা সন্দ্বিহান. আপনি ভাববেন, আরে আমার কাছে get_lengthতাই সম্ভবত আমার থাকা উচিত make_subsetএবং তারপরে আপনি এটি প্রকৃতপক্ষে খুঁজে পাবেন makeSubset। অন্তত বিস্ময়ের নীতিটি ব্যবহার করুন এবং সামঞ্জস্য বজায় রাখুন।

স্ট্রাক্ট, টাইপডেফস এবং এনামগুলির মতো নাম লিখতে আমি ক্যামেলকেসকে দরকারী মনে করি। যদিও এটি সবই। বাকি সমস্তগুলির জন্য (ফাংশন নাম, কাঠামোর সদস্যের নাম, ইত্যাদি) আমি আন্ডারস্কোর_সাম্প ব্যবহার করি।


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

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

1
"আমি নাম লেখার জন্য ক্যামেলকেসকে দরকারী মনে করি ..." আপনি যদি এটি মূলধন থেকে শুরু করেন তবে এটি আসলে পাস্কেলকেস।
Tagc

7

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

Bluetooth_Init()
CommsHub_Update()
Serial_TxBuffer[]

2
এতটা অস্বাভাবিক নয়, তবুও খুব দরকারী।
chux -

3

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

কেবলমাত্র আমিই যুক্ত করতে চাই যে আমি uint32_t এবং আকার_t এর স্টাইলে টাইপের শেষে _t পছন্দ করেছিলাম। এটি আমার কাছে খুব সি-ইশ যদিও কেউ কেউ অভিযোগ করতে পারে এটি কেবল "বিপরীত" হাঙ্গেরীয়।


3
ঠিক আছে, এখানে সম্মেলনগুলি পুরো জায়গা জুড়ে এবং বেমানান, যার কারণে আমি একটি ডকুমেন্ট তৈরি করতে চলেছি। এছাড়াও, আমি জিজ্ঞাসা করছি কেন। সম্প্রদায়ের sensকমত্য কি তা দেখার জন্য।
জেফভি

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

7
আমি বিশ্বাস করি যে প্রকারের নাম _ টি এ শেষ হয় তা পসিক্স মান দ্বারা সংরক্ষিত।
ক্যাফে

4
_T দিয়ে নাম সমাপ্তকরণ সংরক্ষিত। দেখুন gnu.org/software/libc/manual/html_node/Reserved-Names.html , "নাম '_t' দিয়ে শেষ অতিরিক্ত টাইপ নামের জন্য সংরক্ষিত হয়।"
Étienne

2

স্বতঃ নাম সমাপ্তি আরও সহজ করতে আপনার শব্দের ক্রম সম্পর্কেও ভাবা উচিত ।

একটি ভাল অনুশীলন: গ্রন্থাগারের নাম + মডিউল নাম + ক্রিয়া + বিষয়

যদি কোনও অংশ প্রাসঙ্গিক না হয় তবে কেবল এটি এড়িয়ে যান, তবে কমপক্ষে একটি মডিউল নাম এবং একটি ক্রিয়া সর্বদা উপস্থাপন করা উচিত।

উদাহরণ:

  • ফাংশন নাম: os_task_set_prio, list_get_size,avg_get
  • সংজ্ঞায়িত করুন (এখানে সাধারণত কোনও ক্রিয়া অংশ নেই):OS_TASK_PRIO_MAX

0

অনেকগুলি হতে পারে, মূলত আইডিইগুলি কিছু প্রবণতা নির্দেশ করে এবং সি ++ কনভেনশনগুলিও চাপ দিচ্ছে। সি এর জন্য সাধারণত:

  • UNDERSCORED_UPPER_CASE (ম্যাক্রো সংজ্ঞা, ধ্রুবক, এনাম সদস্য)
  • আন্ডারস্কোরড_ ব্লয়ার_কেস (ভেরিয়েবল, ফাংশন)
  • ক্যামেলকেস (কাস্টম ধরণের: স্ট্রাক্ট, এনমস, ইউনিয়ন)
  • আনপ্যাডকামেলকেস (জাভা শৈলীর বিপরীতে)
  • আন্ডারস্কার্ড_কামেলকেস (ভেরিয়েবল, নেমস্পেসের ধরণের ফাংশন)

গ্লোবালগুলির জন্য হাঙ্গেরিয়ান স্বীকৃতি ভাল তবে ধরণের নয়। এমনকি তুচ্ছ নামের জন্য, দয়া করে কমপক্ষে দুটি অক্ষর ব্যবহার করুন।


-1

আমি মনে করি সেগুলি শিক্ষানবিশদের জন্য সহায়তা করতে পারে: গ মধ্যে ভেরিয়েবলের নামকরণের সম্মেলন

  1. আপনাকে বর্ণমালার অক্ষর (এজেড, এজেড), অঙ্ক (0-9) এবং আন্ডার স্কোর (_) ব্যবহার করতে হবে। সুতরাং, আপনি ব্যবহার করতে পারেন ইত্যাদি%, $, #, @: এটা মত কোন বিশেষ অক্ষর ব্যবহার করার অনুমতি দেয় না USER_NAME পরিবর্তনশীল হিসেবে নয় বরং ব্যবহার করতে পারবেন না ব্যবহারকারীর নাম
  2. শব্দের মধ্যে সাদা স্থান ব্যবহার করতে পারে না। সুতরাং, আপনি ভেরিয়েবল হিসাবে ব্যবহারকারীর নাম বা ব্যবহারকারীর নাম বা ব্যবহারকারীর নাম ব্যবহার করতে পারেন তবে ব্যবহারকারীর নাম ব্যবহার করতে পারবেন না ।
  3. অঙ্ক দিয়ে নামকরণ শুরু করা যায় না। সুতরাং, আপনি ব্যবহার করতে পারেন USER1 বা USER2 পরিবর্তনশীল হিসেবে নয় বরং ব্যবহার করতে পারবেন না 1user
  4. এটি ক্ষেত্রে সংবেদনশীল ভাষা language বড় হাতের এবং ছোট হাতের অংশ তাৎপর্যপূর্ণ। আপনি যদি ব্যবহারকারীর মত চলক ব্যবহার করেন তবে আপনি ব্যবহারের জন্য ব্যবহারকারীর নাম বা ব্যবহারকারীর নাম ব্যবহার করতে পারবেন না ।
  5. পরিবর্তনশীল ঘোষণার জন্য আপনি কোনও কীওয়ার্ড (চর, ইন্ট, যদি, এর জন্য, ইত্যাদি) ব্যবহার করতে পারবেন না ।
  6. এএনএসআই মান একটি চলক নামের জন্য 31 টি অক্ষরের দৈর্ঘ্য স্বীকৃতি দেয়

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