หลักการตั้งชื่อที่พบบ่อยที่สุดในภาษา C คืออะไร?


126

หลักการตั้งชื่อที่มักใช้ในภาษา C คืออะไร? ฉันรู้ว่ามีอย่างน้อยสอง:

  1. GNU / linux / K&R ที่มี lower_case_functions
  2. ? ชื่อ? ด้วยฟังก์ชั่น UpperCaseFoo

ฉันกำลังพูดถึง C ที่นี่เท่านั้น โครงการส่วนใหญ่ของเราเป็นระบบฝังตัวขนาดเล็กซึ่งเราใช้ C.

นี่คือสิ่งที่ฉันวางแผนจะใช้สำหรับโครงการต่อไปของฉัน:


C การตั้งชื่ออนุสัญญา

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_' กับตัวแปรส่วนกลาง ฉันจะบังคับใช้ชื่อที่มีความหมาย (ดังนั้น client_locale และไม่ใช่ cl_lc เป็นชื่อตัวแปรส่วนกลาง) Classic C ไม่ใช้อูฐเคส ฉันเขียนโค้ดด้วยตัวอักษรอูฐใน C และมันดูแปลก ๆ (ฉันจะไม่ทำแบบนั้นอีกแล้ว) จะว่าไปก็ไม่ผิด - และความสม่ำเสมอสำคัญกว่าที่ใช้ตามแบบแผน หลีกเลี่ยง typedefs ที่ห่อหุ้มตัวชี้โครงสร้าง พิจารณามาตรฐาน C - 'FILE *' สะกดดังนั้นไม่ใช่ FILE_PTR
Jonathan Leffler

2
@ โจนาธานเลฟฟ์เลอร์เกิดอะไรขึ้นกับ g_ เพื่อแสดงความหมายของโลก? ในระบบฝังตัวฉันเคยมีปัญหามาก่อนซึ่งมันยากที่จะติดตามการอ้างอิงระหว่างโมดูลผ่าน global vars และ extern g_somevar โดยส่วนตัวแล้วฉันคิดว่ามันเป็นความคิดที่ไม่ดี แต่สิ่งเหล่านี้มักจะทำด้วยเหตุผลด้านประสิทธิภาพ ตัวอย่างเช่นค่าสถานะส่วนกลางที่กำหนดโดยการขัดจังหวะที่ระบุว่าข้อมูลพร้อมแล้ว
JeffV

2
สำหรับสิ่งที่คุ้มค่าหลักการตั้งชื่อนี้ส่วนใหญ่ฉีกมาจากข้อตกลง PalmOS API นอกจากนี้ยังคล้ายกับการประชุมที่ใช้ในหนังสือของ O'Reilly: "Programming Embedded Systems with C และ GNU Development Tools" โดยส่วนตัวผมชอบ TitleCase ในชื่อฟังก์ชัน ฉันคิดว่าจะใช้ lowerCamelCase ในฟังก์ชันการเชื่อมโยงภายใน (ซึ่งฉันเรียกว่าส่วนตัวในคำถามของฉัน)
JeffV

3
@Chris Lutz ฉันเห็นด้วยสุดใจ เมื่อใดก็ตามที่เป็นไปได้ vars จะถูกเก็บไว้ในขอบเขตที่แคบที่สุด โปรดทราบว่ามีสามขอบเขตที่เรากำลังพูดถึง: local to a function, local to a module (ไม่มีการเชื่อมโยงภายนอกกับตัวแปร) และ globals ที่มีการเชื่อมโยงภายนอก เป็นเรื่องปกติที่จะมีตัวแปร "global to a module" ในระบบฝังตัว ดังนั้นจึงต้องใช้ความระมัดระวังในการระบุลูกโลกที่มีการเชื่อมโยงภายนอกเพื่อให้สามารถรักษาให้น้อยที่สุดและเข้าใจการโต้ตอบของโมดูล ซึ่งคำนำหน้า "g_" มีประโยชน์
JeffV

47
ฉันต้องการนำหน้าตัวแปรส่วนกลางด้วย //
plafer

คำตอบ:


129

สิ่งที่สำคัญที่สุดที่นี่คือความสม่ำเสมอ ที่กล่าวว่าฉันปฏิบัติตามหลักการเข้ารหัส GTK + ซึ่งสามารถสรุปได้ดังนี้:

  1. มาโครและค่าคงที่ทั้งหมดเป็นตัวพิมพ์ใหญ่: MAX_BUFFER_SIZE, TRACKING_ID_PREFIX.
  2. ชื่อโครงสร้างและ typedef ใน camelcase: GtkWidget, TrackingOrder.
  3. ฟังก์ชั่นที่ทำงานบนโครงสร้าง: สไตล์ C คลาสสิก: 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()เพิ่มคลาสสตอเรจแบบคงที่
สิงหาคม Karlstrom

27
หมายเหตุเพิ่มเติมเกี่ยวกับจุดที่ 6: มาตรฐาน C มีกฎบางประการเกี่ยวกับการสงวนชื่อที่ขึ้นต้นด้วย_สำหรับการใช้งานและการใช้งานในอนาคต มีข้อยกเว้นบางประการสำหรับชื่อที่ขึ้นต้นด้วย_แต่ในความคิดของฉันมันไม่คุ้มกับปัญหาในการท่องจำ กฎที่ปลอดภัยที่ควรปฏิบัติคือ_ห้ามใช้ชื่อที่ขึ้นต้นด้วยรหัสของคุณ รายการคำถามที่พบบ่อยที่เกี่ยวข้อง: c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=decl#namespace
jw013

5
# 2 เป็นมากขึ้นโดยเฉพาะกรณีอูฐบนหรือกรณี Pascal ตัวพิมพ์เล็กหรือตัวพิมพ์เล็กอูฐใช้ตัวพิมพ์เล็กบนตัวอักษรตัวแรก
Clint Pachl

9
แล้วตัวแปรหลายคำในท้องถิ่นล่ะ? my_var หรือ myVar?
Dean Gurvitz

5
Global variables: just don't use global variables. They are evil.- เว้นแต่คุณจะทำงานในโครงการฝังตัวและคุณมี RAM 1024 ไบต์และ CPU 8MHz
Kamil

30

"ตัวชี้โครงสร้าง" ไม่ใช่เอนทิตีที่ต้องมีอนุสัญญาการตั้งชื่อเพื่อครอบคลุม struct WhatEver *พวกเขากำลังเพียง อย่าซ่อนความจริงที่ว่ามีตัวชี้ที่เกี่ยวข้องกับตัวพิมพ์ที่ฉลาดและ "ชัดเจน" มันไม่มีจุดประสงค์คือพิมพ์อีกต่อไปและทำลายสมดุลระหว่างการประกาศและการเข้าถึง


29
+1 สำหรับเนื้อหา "อย่าซ่อนพอยน์เตอร์" แม้ว่าคำตอบนี้จะไม่สามารถตอบคำถามที่เหลือได้มากนัก (ยัง)
Jonathan Leffler

1
@unwind ฉันมักจะเห็นด้วย อย่างไรก็ตามในบางครั้งตัวชี้ไม่ได้มีจุดมุ่งหมายให้ถูกอ้างถึงภายนอกและเป็นจุดจับสำหรับผู้บริโภคมากกว่าตัวชี้ที่แท้จริงไปยังโครงสร้างที่พวกเขาจะใช้ นั่นคือสิ่งที่ฉันทิ้ง TitleCasePtr ไว้ typedef struct {fields} MyStruct, * MyStructPtr;
JeffV

ฉันกำลังลบ TitleCasePtr มันทำให้เสียสมาธิจากคำถามจริง
JeffV

1
-1 จากฉันเนื่องจากการประกาศประเภทตัวชี้ช่วยลดความยุ่งเหยิงโดยเฉพาะอย่างยิ่งในลายเซ็นของฟังก์ชันและ "ความไม่สมดุล" ระหว่างการประกาศและการเข้าถึงจะปรากฏในไฟล์การนำไปใช้งานเท่านั้น - ไคลเอนต์ไม่ (ไม่ควร) เข้าถึงสมาชิกฟิลด์โดยตรง
สิงหาคม Karlstrom

1
@AugustKarlstrom วิจิตร. ฉันไม่เข้าใจว่ามีอะไร "เท่านั้น" เกี่ยวกับไฟล์การนำไปใช้งานไม่ใช่รหัสนั้นด้วยหรือ ฉันไม่ได้ตีความคำถามว่าเป็นเพียงชื่อ "ภายนอก" เท่านั้น โค้ดทั้งหมดคือ "การนำไปใช้" ในบางระดับ
ผ่อนคลาย

17

ประการแรก C ไม่มีฟังก์ชันสาธารณะ / ส่วนตัว / เสมือน นั่นคือ C ++ และมีรูปแบบที่แตกต่างกัน ใน C โดยทั่วไปคุณจะมี:

  • ค่าคงที่ใน ALL_CAPS
  • ขีดล่างเพื่อคั่นคำในโครงสร้างหรือชื่อฟังก์ชันแทบจะไม่เคยเห็นกรณีอูฐใน C;
  • โครงสร้าง, ไทพีดีฟ, สหภาพ, สมาชิก (ของสหภาพแรงงานและโครงสร้าง) และค่า enum มักจะเป็นตัวพิมพ์เล็ก (จากประสบการณ์ของฉัน) แทนที่จะเป็นแบบแผน C ++ / Java / C # / etc ในการสร้างตัวอักษรตัวแรกเป็นตัวพิมพ์ใหญ่ แต่ฉันคิดว่าเป็นไปได้ใน C ด้วย

C ++ มีความซับซ้อนมากขึ้น ฉันเคยเห็นการผสมผสานที่แท้จริงที่นี่ กรณีอูฐสำหรับชื่อคลาสหรือตัวพิมพ์เล็ก + ขีดล่าง (กรณีอูฐเป็นเรื่องธรรมดามากกว่าในประสบการณ์ของฉัน) มีการใช้โครงสร้างน้อยมาก (และโดยทั่วไปเนื่องจากไลบรารีต้องการมิฉะนั้นคุณจะใช้คลาส)


@cletus ฉันตระหนักดีว่า โดยส่วนตัวฉันหมายถึงฟังก์ชันที่ไม่เปิดเผยภายนอกในส่วนหัวของโมดูลและไม่ได้ตั้งใจให้ใช้โดยโค้ดภายนอกโมดูล สาธารณะจะเป็นฟังก์ชัน API ของโมดูลที่มีไว้สำหรับใช้ภายนอก
JeffV

3
คุณสามารถถือว่าฟังก์ชันคงที่เป็นส่วนตัว คำถามไม่ได้กล่าวถึงเสมือน แต่ +1 สำหรับ 'ไม่ค่อยเห็นกรณีอูฐใน C'
Jonathan Leffler

2
ฉันคิดว่าเจฟฟ์หมายถึงexternal linkage"หน้าที่สาธารณะ" และinternal linkageสำหรับ "ฟังก์ชันส่วนตัว"
PMG

1
ฉันเคยเห็นค่าคงที่เริ่มต้นด้วย ak และใน: kBufferSize ไม่แน่ใจว่ามาจากไหน
JeffV

2
ALL_CAPSมักใช้สำหรับค่า enum ด้วย
คาเฟ่

15

คุณก็รู้ฉันชอบให้มันเรียบง่าย แต่ชัดเจน ... นี่คือสิ่งที่ฉันใช้ใน C:

  • ตัวแปรเล็กน้อย : i,n,cฯลฯ ... (มีเพียงตัวอักษรเดียวหากตัวอักษรไม่ชัดเจนให้กำหนดเป็นตัวแปรท้องถิ่น)
  • ตัวแปรท้องถิ่น :lowerCamelCase
  • ตัวแปรทั่วโลก :g_lowerCamelCase
  • ตัวแปร Const :ALL_CAPS
  • ตัวแปรตัวชี้ : เพิ่มp_คำนำหน้า สำหรับตัวแปรทั่วโลกมันจะเป็นgp_varสำหรับตัวแปรท้องถิ่นสำหรับตัวแปรp_var const p_VARหากใช้พอยน์เตอร์ไกลให้ใช้fp_แทนp_.
  • โครงสร้าง : ModuleCamelCase(โมดูล = ชื่อโมดูลแบบเต็มหรือตัวย่อ 2-3 ตัวอักษร แต่ยังอยู่ในCamelCase)
  • ตัวแปรโครงสร้างสมาชิก :lowerCamelCase
  • Enums :ModuleCamelCase
  • ค่า Enum :ALL_CAPS
  • หน้าที่สาธารณะ :ModuleCamelCase
  • ฟังก์ชั่นส่วนตัว :CamelCase
  • มาโคร :CamelCase

ฉันพิมพ์โครงสร้างของฉัน แต่ใช้ชื่อเดียวกันสำหรับทั้งแท็กและ typedef แท็กไม่ได้มีไว้สำหรับใช้ทั่วไป แต่ควรใช้ typedef แทน ฉันยังส่งต่อประกาศ typedef ในส่วนหัวโมดูลสาธารณะสำหรับการห่อหุ้มและเพื่อให้ฉันสามารถใช้ชื่อ typedef ในคำจำกัดความได้

struct ตัวอย่างเต็ม :

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

ฉันไม่รู้อะไรเกี่ยวกับกรอบงาน qt แต่คุณสามารถเขียนโค้ดของคุณในรูปแบบสไตล์ใดก็ได้ที่คุณต้องการ เท่าที่ฉันรู้ไม่มีอะไรขัดขวางคุณ
SeanRamey

10

การเขียนโค้ดในC #, java, C, C ++ และวัตถุประสงค์ Cในเวลาเดียวกันฉันได้ใช้หลักการตั้งชื่อที่เรียบง่ายและชัดเจนเพื่อทำให้ชีวิตของฉันง่ายขึ้น

ก่อนอื่นมันต้องอาศัยพลังของ IDE สมัยใหม่ (เช่น eclipse, Xcode ... และเครื่องหมายอื่น ๆ ที่ IDE กำหนดให้

จากนั้นการประชุม:

  • ชื่อใด ๆ ต้องเป็นประโยคที่อ่านได้เพื่ออธิบายสิ่งที่คุณมี เช่น "นี่คืออนุสัญญาของฉัน".
  • จากนั้น 4 วิธีในการแยกการประชุมออกจากประโยค:
    1. THIS_IS_MY_CONVENTIONสำหรับมาโครสมาชิก enum
    2. ThisIsMyConventionสำหรับชื่อไฟล์ชื่ออ็อบเจ็กต์ (class, struct, enum, union ... ), ชื่อฟังก์ชัน, ชื่อเมธอด, typedef
    3. this_is_my_conventionตัวแปรโกลบอลและโลคัล
      พารามิเตอร์องค์ประกอบโครงสร้างและยูเนี่ยน
    4. thisismyconvention [เป็นทางเลือก] ตัวแปรท้องถิ่นและชั่วคราว (เช่น a for () loop index)

และนั่นแหล่ะ

มันให้

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ใช้หลักการของความประหลาดใจน้อยที่สุดและสม่ำเสมอ

ฉันคิดว่า CamelCase มีประโยชน์ในการพิมพ์ชื่อเช่น structs, typedefs และ enums เกี่ยวกับทั้งหมดแม้ว่า สำหรับส่วนที่เหลือทั้งหมด (ชื่อฟังก์ชันชื่อสมาชิกโครงสร้าง ฯลฯ ) ฉันใช้ underscore_separation


1
ใช่สิ่งสำคัญเกี่ยวกับหลักการตั้งชื่อคือความสามารถในการคาดเดาและความสอดคล้องกัน นอกจากนี้เนื่องจากไลบรารี C ใช้ตัวพิมพ์เล็กทั้งหมดที่มี _ สำหรับการเว้นวรรคฉันขอแนะนำให้ใช้สิ่งนี้เพื่อที่คุณจะได้ไม่ต้องจัดการกับรูปแบบการตั้งชื่อ 2 แบบที่แตกต่างกันในโครงการ (สมมติว่าคุณไม่ได้เขียน wrapper รอบ libc เพื่อสร้าง มันเป็นไปตามการตั้งชื่อของคุณ .. แต่นั่นมันขั้นต้น)
Earlz

นอกจากนี้ยังใช้ typedef ที่มี " t" ต่อท้าย แต่ฉันไม่เห็นใครแนะนำอย่างนั้น ในความเป็นจริงไลบรารีมาตรฐานนั้นไม่สอดคล้องกันด้วยซ้ำ: div_t (stdlib.h) เป็นโครงสร้างดังนั้นจึงเป็น tm (time.h) นอกจากนี้ลองดูที่สมาชิกโครงสร้าง tm ซึ่งทั้งหมดขึ้นต้นด้วย tmซึ่งดูเหมือนไม่มีจุดหมายและน่าเกลียด (IMO)
JeffV

1
"ฉันคิดว่า CamelCase มีประโยชน์ในการพิมพ์ชื่อ ... " ถ้าคุณเริ่มจากตัวพิมพ์ใหญ่จริงๆแล้วมันคือ PascalCase
Tagc

7

นี่คือสิ่งที่ผิดปกติ (เห็นได้ชัด) ซึ่งฉันพบว่ามีประโยชน์: ชื่อโมดูลใน CamelCase จากนั้นขีดล่างตามด้วยฟังก์ชันหรือชื่อขอบเขตไฟล์ใน CamelCase ตัวอย่างเช่น:

Bluetooth_Init()
CommsHub_Update()
Serial_TxBuffer[]

2
ไม่ธรรมดา แต่มีประโยชน์มาก
chux - คืนสถานะ Monica

3

ฉันสับสนอยู่อย่างหนึ่ง: คุณกำลังวางแผนที่จะสร้างหลักการตั้งชื่อใหม่สำหรับโครงการใหม่ โดยทั่วไปคุณควรมีหลักการตั้งชื่อที่ครอบคลุมทั้ง บริษัท หรือทั้งทีม หากคุณมีโครงการที่มีหลักการตั้งชื่อรูปแบบใด ๆ อยู่แล้วคุณไม่ควรเปลี่ยนรูปแบบสำหรับโครงการใหม่ หากการประชุมข้างต้นเป็นเพียงการกำหนดแนวทางปฏิบัติที่มีอยู่ของคุณคุณก็จะเป็นสีทอง ยิ่งแตกต่างจากพฤตินัยที่มีอยู่มาตรฐานมากเท่าไหร่ก็ยิ่งยากที่จะได้รับส่วนแบ่งความคิดในมาตรฐานใหม่

เกี่ยวกับคำแนะนำเดียวที่ฉันจะเพิ่มคือฉันชอบ _t ที่ส่วนท้ายของประเภทในรูปแบบของ uint32_t และ size_t เป็นเรื่องที่น่าสนใจสำหรับฉันแม้ว่าบางคนอาจจะบ่นว่ามันเป็นแค่ภาษาฮังการี "ถอยหลัง"


3
การประชุมที่นี่มีอยู่เต็มไปหมดและไม่สอดคล้องกันซึ่งเป็นเหตุผลว่าทำไมฉันถึงจัดทำเอกสาร ด้วยเหตุนี้ฉันจึงถาม เพื่อดูว่าฉันทามติของชุมชนคืออะไร
JeffV

ฉันเข้าใจความเจ็บปวดนั้น แต่ต้องมีบางส่วนของอนุสัญญาที่มีอยู่ซึ่งเป็นที่นิยมมากที่สุด คุณควรเริ่มต้นที่นั่นไม่ใช่บนหน้าเว็บอินเทอร์เน็ตแบบสุ่ม นอกจากนี้คุณควรถาม devs อื่น ๆ ของคุณว่าพวกเขาคิดว่าดี
jmucchiello

7
ฉันเชื่อว่าชื่อประเภทที่ลงท้ายด้วย _t สงวนไว้โดยมาตรฐาน POSIX
คาเฟ่

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

อาจมีหลาย IDE ส่วนใหญ่กำหนดแนวโน้มบางอย่างและการประชุม C ++ ก็กำลังผลักดันเช่นกัน สำหรับ C ทั่วไป:

  • UNDERSCORED_UPPER_CASE (คำจำกัดความมาโครค่าคงที่สมาชิก enum)
  • underscored_lower_case (ตัวแปรฟังก์ชัน)
  • CamelCase (ประเภทที่กำหนดเอง: โครงสร้าง, enums, สหภาพแรงงาน)
  • uncappedCamelCase (สไตล์โอปป้า Java)
  • UnderScored_CamelCase (ตัวแปรฟังก์ชันภายใต้ชนิดของเนมสเปซ)

สัญกรณ์ภาษาฮังการีสำหรับ globals นั้นใช้ได้ แต่ไม่ใช่สำหรับประเภท และแม้กระทั่งสำหรับชื่อที่ไม่สำคัญโปรดใช้อักขระอย่างน้อยสองตัว


-1

ฉันคิดว่าสิ่งเหล่านี้สามารถช่วยได้สำหรับผู้เริ่มต้น: การตั้งชื่อตัวแปรใน c

  1. คุณต้องใช้ Alphabetic Character (az, AZ), Digit (0-9) และ Under Score (_) ไม่อนุญาตให้ใช้อักขระพิเศษใด ๆ เช่น%, $, #, @ เป็นต้นดังนั้นคุณสามารถใช้user_nameเป็นตัวแปรได้ แต่ไม่สามารถใช้user & nameได้
  2. ไม่สามารถใช้ช่องว่างระหว่างคำ ดังนั้นคุณสามารถใช้user_name หรือชื่อผู้ใช้หรือชื่อผู้ใช้เป็นตัวแปรได้ แต่ไม่สามารถใช้ชื่อผู้ใช้ได้ชื่อผู้ใช้
  3. ไม่สามารถเริ่มตั้งชื่อด้วยตัวเลข ดังนั้นคุณสามารถใช้user1 หรือ user2เป็นตัวแปรได้ แต่ไม่สามารถใช้1userได้
  4. เป็นภาษาที่ละเอียดอ่อน ตัวพิมพ์ใหญ่และตัวพิมพ์เล็กมีความสำคัญ หากคุณใช้ตัวแปรเช่นชื่อผู้ใช้คุณจะไม่สามารถใช้USERNAME หรือชื่อผู้ใช้สำหรับพ่อได้
  5. คุณไม่สามารถใช้คำสำคัญใด ๆ(char, int, if, for, while etc)สำหรับการประกาศตัวแปร
  6. มาตรฐาน ANSI รู้จักความยาว 31 อักขระสำหรับชื่อตัวแปร

โพสต์นี้มีจุดมุ่งหมายอย่างชัดเจนเพื่อหารือเกี่ยวกับการตั้งชื่อการประชุมไม่ได้มีข้อ จำกัด สิ่งที่คุณระบุเป็นสิ่งที่คุณไม่สามารถทำได้เนื่องจากเป็นข้อผิดพลาดทางไวยากรณ์
ไล่ล่า
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.