คำถามติดแท็ก c

C เป็นภาษาโปรแกรมคอมพิวเตอร์ทั่วไปที่ใช้สำหรับระบบปฏิบัติการเกมและงานที่มีประสิทธิภาพสูงอื่น ๆ

3
อนุสัญญาการตั้งชื่อทั่วไปสำหรับฟังก์ชั่นสาธารณะและส่วนตัวของ OO C คืออะไร? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว คำถามสั้น ๆ มีวิธีทั่วไปในการตั้งชื่อสมาชิก 'สาธารณะ' และ 'ส่วนตัว' ของโครงการ OO C หรือไม่? ประวัติความเป็นมา ผมเข้าใจว่าประชาชนและสมาชิกส่วนตัวไม่ได้จริงๆมีอยู่ในภาษา C อย่างไรก็ตามเช่นเดียวกับโปรแกรมเมอร์ C ส่วนใหญ่ฉันยังคงปฏิบัติต่อสมาชิกในฐานะสาธารณะหรือส่วนตัวเพื่อคงไว้ซึ่งการออกแบบ OO นอกเหนือจากวิธีการทั่วไปของ OO ฉันพบว่าตัวเองทำตามรูปแบบ (ดูตัวอย่างด้านล่าง) ซึ่งทำให้ฉันแยกแยะว่าวิธีใดมีความหมายสำหรับโลกภายนอกเทียบกับสมาชิกส่วนตัวที่อาจมีการตรวจสอบน้อยลง / มีประสิทธิภาพมากขึ้นเป็นต้น ... มีมาตรฐานหรือแนวปฏิบัติที่ดีที่สุดสำหรับสิ่งนั้นหรือเป็นตัวอย่างของฉันที่ด้านล่างเป็นวิธีที่ดีในการเข้าถึงสิ่งนี้หรือไม่? ส่วนหัวตัวอย่าง #ifndef _MODULE_X_H_ #define _MODULE_X_H_ bool MOD_X_get_variable_x(void); void MOD_X_set_variable_x(bool); #endif /* _MODULE_X_H_ */ ตัวอย่างแหล่งที่มา // Module Identifier: …

2
การเพิ่มการทดสอบหน่วยในโครงการ C ธรรมดา
ชื่อกล่าวมันทั้งหมด บริษัท ของฉันกำลังนำโครงการเฟิร์มแวร์มรดกมาใช้ใหม่สำหรับอุปกรณ์ไมโครคอนโทรลเลอร์ซึ่งเขียนด้วยภาษา C ล้วนๆ มีบางส่วนที่ผิดอย่างชัดเจนและจำเป็นต้องเปลี่ยนและมาจากพื้นหลัง C # / TDD ฉันไม่ชอบความคิดในการสร้างสิ่งต่าง ๆ แบบสุ่มโดยไม่มีการทดสอบเพื่อรับรองว่าการทำงานจะไม่เปลี่ยนแปลง นอกจากนี้ฉันยังเห็นว่ามีการแนะนำข้อบกพร่องที่หายากในหลาย ๆ ครั้งผ่านการเปลี่ยนแปลงเล็กน้อย (ซึ่งเป็นสิ่งที่ฉันเชื่อว่าจะได้รับการแก้ไขหากใช้การทดสอบการถดถอย) ต้องระมัดระวังเป็นอย่างมากเพื่อหลีกเลี่ยงข้อผิดพลาดเหล่านี้: มันยากที่จะติดตามกลุ่มรอบตัวรอบรหัส เพื่อสรุป: คุณจะเพิ่มการทดสอบหน่วยในโค้ดคู่ที่มีอยู่อย่างแน่นหนาก่อนทำการเปลี่ยนโครงสร้างใหม่ได้อย่างไร คุณแนะนำเครื่องมืออะไร (สำคัญน้อยกว่า แต่ก็ยังน่ารู้) ฉันไม่ได้เกี่ยวข้องโดยตรงกับการเขียนรหัสนี้ (ความรับผิดชอบของฉันคือแอพที่จะโต้ตอบกับอุปกรณ์ในรูปแบบต่าง ๆ ) แต่มันจะไม่ดีถ้าหลักการเขียนโปรแกรมที่ดีถูกทิ้งไว้ข้างหลังหากมีโอกาสที่พวกเขาจะสามารถใช้งานได้

7
โปรแกรมเมอร์ C ควรรู้อะไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา อะไรคือแนวคิด / เทคนิค / คุณสมบัติภาษาที่โปรแกรมเมอร์ C ที่ดีทุกคนควรรู้ / ระวัง (ไม่รวมวิศวกรรมซอฟต์แวร์ทั่วไปและลักษณะที่คล้ายกัน ฉันต้องการทราบเพื่อที่ฉันจะได้สามารถเติมเต็มช่องว่างที่เป็นไปได้ในความรู้ C ของฉัน

7
มีหลักการอะไรบ้างที่เรียนรู้จาก C ซึ่งไม่สามารถเรียนรู้ในภาษาระดับสูงกว่าได้ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ฉันเชื่อว่า C เป็นภาษาที่ดีในการเรียนรู้หลักการที่อยู่เบื้องหลังการเขียนโปรแกรม คุณยืนหยัดเพื่อเรียนรู้ในภาษาระดับต่ำกว่าที่เป็น "เวทมนต์" ห่างจากภาษาระดับสูงเช่นรูบี?
11 c  low-level 

5
วิธีที่ง่ายและสะอาดในการเปรียบเทียบตัวเลขสามตัว
ฉันได้รับรหัสบางอย่างที่มีลำดับของการifทำงานที่ แต่ก็รู้สึกยุ่ง โดยพื้นฐานแล้วฉันต้องการเลือกจำนวนเต็มสามตัวที่ใหญ่ที่สุดและตั้งค่าสถานะเป็นคำพูดที่เลือก รหัสปัจจุบันของฉันดูเหมือนว่านี้: a = countAs(); b = countBs(); c = countCs(); if (a > b && a > c) status = MOSTLY_A; else if (b > a && b > c) status = MOSTLY_B; else if (c > a && c > b) status = MOSTLY_C; else status …
11 algorithms  c 

2
ประโยชน์ของ RTOS กับ Bare Metal สำหรับการเขียนโปรแกรม MCU?
โปรดทราบ:คำถามนี้กล่าวถึง RTOS สองตัวโดยเฉพาะ แต่มีความเป็นทั่วไปมากกว่าและใคร ๆ ก็สามารถตอบได้โดยเขียนรหัส C สำหรับ RTOSes แบบฝังตัวก่อนหน้านี้และให้ซอฟต์แวร์ทำงานโดยตรงบน MCU ฉันสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ RTOS แบบฝังและการเขียนแอปพลิเคชันสำหรับพวกเขา ฉันกำลังดูEmboxและRIOTเพราะพวกเขาเป็นโอเพ่นซอร์สที่ทันสมัยใช้งานได้และดูเหมือนจะมีเอกสารที่ยอดเยี่ยม เป้าหมายของฉันมีสองขั้นตอน: ระยะที่ 1 คือการหาวิธีการคอมไพล์และแฟลชระบบปฏิบัติการเหล่านี้ไปยัง MCU (อาจเป็น AVR หรือ ARM) ขั้นตอนที่ 2 คือเขียนโปรแกรม C อย่างง่าย (โดยทั่วไปคือ daemon ไร้หัว) ซึ่งจะพัฒนาไปตามเวลาเป็น "งานอดิเรก" จากนั้นฉันจะแฟลช / ปรับใช้โปรแกรมนี้กับ MCU เดียวกันดังนั้นจึงประสบความสำเร็จในการปรับใช้ appstack ซึ่งประกอบด้วย Embox / RIOT และแอพของฉันอยู่ด้านบนของมัน ก่อนที่ผมจะไปลงถนนใด ๆ ที่ในที่สุดนำไปสู่การสิ้นสุดตายผมเจอบทความนี้ที่จะได้งานที่ดีงามของการอธิบายว่าทำไมปพลิเคชันแบบ real-time เขียนใน …

5
ห้องสมุดแบบคงที่ C ขมวดคิ้วอยู่หรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา มี 2 ​​อาร์กิวเมนต์สำหรับการมีไลบรารีที่แบ่งใช้: ช่วยลดพื้นที่ดิสก์ เมื่อมีการอัปเดตไลบรารีที่ใช้ร่วมกันไบนารีทั้งหมดขึ้นอยู่กับว่าจะได้รับการอัปเดต มีข้อเสียเปรียบหนึ่งสำหรับไลบรารีที่แชร์: พวกเขา (สามารถ) แนะนำนรกพึ่งพา บนคอมพิวเตอร์เดสก์ท็อปข้อได้เปรียบอันดับหนึ่งไม่ได้ถืออีกต่อไปแล้ว การสูญเสียพื้นที่ดิสก์ไม่เป็นปัญหามากในทุกวันนี้ การมีไบนารีแบบคงที่จะช่วยให้เราจัดการผู้จัดการแพคเกจได้ดีขึ้น - ฉันหมายถึงนรกที่พึ่งพาได้จะเป็นอดีต การเพิ่มโปรแกรมจะเป็นการเพิ่มไบนารี ในที่สุดโฟลเดอร์ที่ให้มันจัดการกับไฟล์ การลบโปรแกรมจะเป็นการลบไฟล์นี้ พึ่งพา? ที่ไปแล้ว. ข้อได้เปรียบที่สองยังคงมีอยู่ แต่ฉันคิดว่าข้อดีของไบนารีคงที่ในคอมพิวเตอร์เดสก์ท็อปนั้นมีน้ำหนักมากกว่า ฉันหมายถึงแม้แต่ภาษาใหม่อย่าง Go ก็รวบรวมไบนารีทั้งหมดของพวกเขาทั้งๆที่มีข้อได้เปรียบของ shared library เพราะความสะดวก เนื่องจากข้อได้เปรียบหลักอย่างหนึ่งของไลบรารีที่ใช้ร่วมกันไม่ใช่เรื่องใหญ่อีกต่อไปแล้ว C นิ่งไลบรารียังคงขมวดคิ้วอยู่หรือไม่? ถ้าเป็นเช่นนั้นทำไม
11 c  compiler 

4
การจัดทำดัชนีตัวชี้
ฉันกำลังอ่านหนังสือชื่อ "Numerical Recipes in C" ในหนังสือเล่มนี้ผู้เขียนให้รายละเอียดว่าอัลกอริทึมบางอย่างทำงานได้ดีกว่าโดยธรรมชาติถ้าเรามีดัชนีที่ขึ้นต้นด้วย 1 (ฉันไม่ได้ทำตามอาร์กิวเมนต์ทั้งหมดของเขาและนั่นไม่ใช่จุดของโพสต์นี้) แต่ C จะทำดัชนีอาร์เรย์ของมันเสมอ เพื่อหลีกเลี่ยงสิ่งนี้เขาแนะนำให้ลดทอนพอยน์เตอร์หลังจากการจัดสรรเช่น: float *a = malloc(size); a--; เขาบอกว่าสิ่งนี้จะให้ตัวชี้ที่มีดัชนีเริ่มต้นด้วย 1 อย่างมีประสิทธิภาพซึ่งจะทำให้คุณเป็นอิสระด้วย: free(a + 1); เท่าที่ฉันรู้ว่านี่เป็นพฤติกรรมที่ไม่ได้กำหนดโดยมาตรฐาน C เห็นได้ชัดว่านี่เป็นหนังสือที่มีชื่อเสียงอย่างมากในชุมชน HPC ดังนั้นฉันไม่ต้องการเพียงแค่เพิกเฉยต่อสิ่งที่เขาพูด แต่เพียงการลดตัวชี้นอกช่วงที่จัดสรรนั้น นี่เป็นพฤติกรรม "อนุญาต" ใน C หรือไม่ ฉันได้ทำการทดสอบโดยใช้ทั้ง gcc และ icc และผลลัพธ์ทั้งสองนั้นปรากฏขึ้นเพื่อระบุว่าฉันไม่ต้องกังวลอะไร แต่ฉันต้องการที่จะเป็นบวกอย่างแน่นอน
11 c  pointers 

2
ไฟล์วัตถุ (C) ถูกสร้างด้วยคอมไพเลอร์ที่เข้ากันได้กับไบนารีต่างกันหรือไม่?
ฉันเข้าใจว่าคอมไพเลอร์ C ++ ไม่สามารถทำงานร่วมกันได้ อย่างไรก็ตามฉันไม่พบสิ่งใดในหัวข้อนี้สำหรับ C โดยเฉพาะ ฉันรู้ว่ามาตรฐาน C ออกจากห้องมากมายสำหรับคอมไพเลอร์ที่จะใช้สิ่งต่าง ๆ แต่พวกเขาเห็นว่าเหมาะสม: ตัวอย่างเช่นขนาดและการจัดแนวของชนิดข้อมูลส่วนใหญ่ (ทั้งหมด?) คือการบันทึกที่ใช้งาน ดังนั้นคอมไพเลอร์สองตัว (หรือคอมไพเลอร์เดียวกันสองเวอร์ชั่น) อาจไม่เห็นด้วยกับรายละเอียดมากมาย ฉันถูกต้องโดยคิดว่าไม่มีการรับประกันว่าไฟล์ออบเจ็กต์สองไฟล์ที่คอมไพล์ด้วยคอมไพเลอร์ที่ต่างกันจะเชื่อมโยงอย่างถูกต้องจริงหรือ ตัวอย่างเช่นขนาดของพอยน์เตอร์อาจเป็น 32 บิตในหนึ่งอ็อบเจ็กต์ไฟล์และ 64 บิตในอีกอัน แต่ถ้าเป็นเช่นนั้นเหตุใดบางครั้ง C ไลบรารีจึงกระจายในรูปแบบที่คอมไพล์แล้ว? มีความคาดหวังหรือไม่ว่าฉันจะใช้คอมไพเลอร์แบบเดียวกับที่พวกเขาทำ (เช่น gcc) หรือมาตรฐานตามความเป็นจริงบางอย่างที่ใช้ในการรับรองความเข้ากันได้ของไบนารี และภาษาอื่น ๆ ที่มีส่วนต่อประสานกับภาษาต่างประเทศช่วยให้แน่ใจได้อย่างไรว่าสิ่งต่าง ๆ จะเข้าแถวอย่างถูกต้องเมื่อเชื่อมโยงกับไฟล์วัตถุ C?
11 c  compiler 

1
การจัดเก็บอักขระ EOF (สิ้นสุดไฟล์) ในประเภท char
ผมอ่านในเดนนิสริตชี่ภาษา C Programmingหนังสือที่intจะต้องนำมาใช้สำหรับตัวแปรที่จะถือ EOF - เพื่อทำให้มันมีขนาดใหญ่พอที่จะสามารถเก็บค่า EOF - charไม่ได้ แต่รหัสต่อไปนี้ทำงานได้ดี: #include<stdio.h> main() { char c; c=getchar(); while(c!=EOF) { putchar(c); c=getchar(); } } เมื่อไม่มีอินพุตให้getcharส่งคืน EOF และในโปรแกรมข้างต้นตัวแปรที่cมีประเภทถ่านสามารถเก็บไว้ได้สำเร็จ ทำไมจึงใช้งานได้ ตามคำอธิบายในหนังสือข้างต้นรหัสไม่ควรทำงาน
11 c 

1
PID วนซ้ำใน C
ฉันเป็นวิศวกรไฟฟ้าที่เป็นแรงผลักดันให้เข้าสู่โลกดิจิตอลและการเรียนรู้เมื่อฉันไป ฉันกำลังเขียนโปรแกรมตัวประมวลผล TI เพื่อทำลูปPID (สัดส่วน - อินทิกรัล - อนุพันธ์) ที่แสดงโดยแผนภาพนี้: ฉันจะอธิบายด้วย: ข้อเสนอแนะเชิงลบ op-amp ที่มีขั้วสายดินไม่คว่ำ อินพุตผ่านเทอร์มินัลเชิงลบ ผลป้อนกลับเป็นวงจร RE ซีรี่ส์ขนานพร้อมกับตัวต้านทานและทั้งหมดนั้นขนานกับฝาปิด ใครมีความคิดวิธีแปลงวงจรนี้เป็นรหัส C? ฉันออกจากองค์ประกอบของฉันเล็กน้อยและสามารถใช้ความช่วยเหลือได้
11 c 

3
Low Latency Unix / Linux
งานการเขียนโปรแกรม latency / ความถี่สูงต่ำส่วนใหญ่ (ขึ้นอยู่กับรายละเอียดของงาน) ดูเหมือนจะนำไปใช้กับแพลตฟอร์มยูนิกซ์ ในสเป็คจำนวนมากพวกเขาร้องขอเป็นพิเศษสำหรับผู้ที่มีประสบการณ์ประเภท "Linux latency ต่ำ" สมมติว่าสิ่งนี้ไม่ได้หมายถึงระบบปฏิบัติการ linux แบบเรียลไทม์ผู้คนสามารถให้ความช่วยเหลือฉันเกี่ยวกับสิ่งนี้ได้หรือไม่ ฉันรู้ว่าคุณสามารถตั้งค่าความสัมพันธ์ของ CPU กับเธรดได้ แต่ฉันสมมติว่าพวกเขาขอมากไปกว่านั้น การปรับแต่งเคอร์เนล? (แม้ว่าฉันจะได้ยินผู้ผลิตเช่น solarflare ผลิตการ์ดเครือข่ายผ่านเคอร์เนลอยู่แล้ว)? สิ่งที่เกี่ยวกับ DMA หรือหน่วยความจำที่ใช้ร่วมกันระหว่างกระบวนการ หากผู้คนสามารถให้ความคิดสั้น ๆ กับฉันฉันสามารถไปและทำวิจัยบน google (คำถามนี้อาจต้องมีคนคุ้นเคยกับการซื้อขายความถี่สูง)
11 c++  c  performance  linux  latency 

3
เหตุใด scanf จึงเรียกว่า scanf (เหมือนกันสำหรับ printf.)
ฉันแค่อยากรู้ว่าทำไมในภาษาการเขียนโปรแกรม C ฟังก์ชั่นในการอ่านอินพุตที่จัดรูปแบบถูกเรียกว่า "scanf" ซึ่งตรงข้ามกับ "readf" ฉันคิดว่ามันมาจากภาษาก่อนหน้าดังนั้นในกรณีนี้เหตุใดจึงตั้งชื่อแบบนั้นในภาษาก่อนหน้า (recurse.) ทำไม "printf" มากกว่า "writef" ในภาษาอื่นที่ไม่ใช่ C ทำไม "พิมพ์" หรือ "เขียน" แทนที่จะเป็น "ดิสเพลย์"

4
วิวัฒนาการของ Win32 API [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว Windows 32 API มีการเปลี่ยนแปลงตลอดเวลาหรือไม่ Charles Petzold หนังสือ "Programming Windows, 5th Edition" จากปี 1998 ยังคงมีข้อมูลที่เกี่ยวข้องหรือเป็นส่วนใหญ่ที่ล้าสมัย / ล้าสมัยหรือไม่? ตัวอย่างที่โดดเด่นของการเพิ่มเติมล่าสุดไปยัง Windows 32 API (ถ้ามี) คืออะไร?
11 books  c  windows  api 

2
วิธีการจัดการการอ้างอิงสำหรับโครงการ C / C ++ อย่างถูกต้อง?
ฉันมีโครงการที่ใช้ไลบรารี C / C ++ โอเพ่นซอร์ส 3-4 แบบ ฉันสร้างไลบรารีเหล่านี้สำหรับหลายแพลตฟอร์มและเช็คอินรวมไฟล์และ libs แบบคงที่สำหรับแพลตฟอร์มต่าง ๆ ในโครงการของฉัน อย่างไรก็ตามฉันต่อสู้กับปัญหาสองสามอย่าง โครงการทั้งหมดเหล่านี้เป็นการบริหารการพึ่งพา และฉันกำลังมองหาคำแนะนำวิธีปฏิบัติที่ดีที่สุด 1) ฉันจะรู้ได้อย่างไรว่าฉันใช้อะไรกันแน่ ฉันไม่มีทางที่จะไปรับ lib แบบคงที่ เป็นผลให้ฉันต้องติดตามอย่างใดอย่างหนึ่ง lib แบบคงที่ฉันใช้ (อาจ SHA ของการกระทำที่มันถูกสร้างขึ้น)? นี่เป็นสิ่งสำคัญอย่างยิ่งเมื่อฉันต้องคิดเมื่อต้องอัพเกรด libs เหล่านี้ 2) ฉันจะสร้างงานสร้างใหม่ได้อย่างไร ฉันอาจพยายามสร้างห้องสมุดเฉพาะสำหรับแพลตฟอร์มเฉพาะ ฉันใช้เวลาซักพักนึง ครั้งต่อไปที่ฉันจะต้องสร้างห้องสมุดเดียวกันอาจจะเป็นในครึ่งปี (เมื่อฉันจะต้องอัพเกรดด้วยเหตุผลใดก็ตามอย่างไรก็ตามในเวลานั้นฉันจะไม่จำอะไรและสภาพแวดล้อมที่มันถูกสร้างขึ้น จะหายไปนาน 3) ฉันควรแยกไลบรารี่เหล่านี้ให้มีซอร์สโค้ดหรือไม่ นี่เป็นข้อกังวลที่น้อยกว่า อย่างไรก็ตามมันยังคงเป็นปัญหา เป็นเรื่องดีที่จะตรวจสอบให้แน่ใจว่าบิลด์นั้นสามารถทำซ้ำได้ (และประเภทนั้นต้องการซอร์สโค้ด)

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