ฉันกำลังดิ้นรนเพื่อหาคำแนะนำในโลกแห่งความเป็นจริงในทางปฏิบัติเกี่ยวกับการตั้งชื่อฟังก์ชั่นสำหรับโครงการห้องสมุดซีขนาดกลาง โครงการห้องสมุดของฉันถูกแยกออกเป็นสองสามโมดูลและ submodules ด้วยส่วนหัวของพวกเขาเองและตามสไตล์ OO (ฟังก์ชั่นทั้งหมดใช้โครงสร้างที่แน่นอนว่าเป็นอาร์กิวเมนต์แรกไม่มี globals ฯลฯ ) มันเป็นสิ่งที่เราชอบ:
MyLib
- Foo
- foo.h
- foo_internal.h
- some_foo_action.c
- another_foo_action.c
- Baz
- baz.h
- some_baz_action.c
- Bar
- bar.h
- bar_internal.h
- some_bar_action.c
โดยทั่วไปฟังก์ชั่นนั้นใหญ่เกินกว่าจะยกตัวอย่างเช่นsome_foo_action
และanother_foo_action
ในfoo.c
ไฟล์การนำไปใช้งานทำให้ฟังก์ชั่นส่วนใหญ่คงที่และเรียกมันว่าวัน
ฉันสามารถจัดการกับการลอกสัญลักษณ์ภายใน ("โมดูลส่วนตัว") เมื่อสร้างห้องสมุดเพื่อหลีกเลี่ยงความขัดแย้งสำหรับผู้ใช้ของฉันด้วยโปรแกรมไคลเอนต์ของพวกเขา แต่คำถามคือวิธีตั้งชื่อสัญลักษณ์ในห้องสมุดของฉัน? จนถึงตอนนี้ฉันได้ทำ:
struct MyLibFoo;
void MyLibFooSomeAction(MyLibFoo *foo, ...);
struct MyLibBar;
void MyLibBarAnAction(MyLibBar *bar, ...);
// Submodule
struct MyLibFooBaz;
void MyLibFooBazAnotherAction(MyLibFooBaz *baz, ...);
แต่ฉันลงท้ายด้วยชื่อสัญลักษณ์ยาวบ้า (นานกว่าตัวอย่าง) ถ้าฉันไม่นำหน้าชื่อด้วย "fake namespace" สัญลักษณ์สัญลักษณ์ภายในของโมดูลจะระบุชื่อการปะทะทั้งหมด
หมายเหตุ: ฉันไม่สนใจเกี่ยวกับ camelcase / Pascal case และอื่น ๆ แค่ชื่อตัวเอง
git merge
ๆ หรือเปล่าแต่มันช่วยได้มากในเรื่องการอ่านการบำรุงรักษา เป็นตัวอย่างที่ผมมีโมดูลสำหรับการวาดภาพ UI กับ OpenGL และฉันมีแยกต่างหาก.c
ไฟล์สำหรับแต่ละองค์ประกอบที่ฉันต้องการ (slider.c
,indicator.c
ฯลฯ ) การใช้งานองค์ประกอบเหล่านี้มีฟังก์ชั่นการวาดภาพหลักอาจมีความยาวไม่กี่ร้อยบรรทัดและมีจำนวนstatic
ผู้ช่วยพอสมควร พวกเขายังเรียกฟังก์ชั่นเรขาคณิตบริสุทธิ์เพียงไม่กี่ตัวจากภายในโมดูล UI เสียงนั้นปกติหรือไม่?