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

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

6
ฉันควรสอนนักเรียนของฉันให้ดีไหม? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา วิธีการใช้กันอย่างแพร่หลายallocaในโลกแห่งความจริง? ฉันควรสอนนักเรียนให้ใช้allocaเมื่อเหมาะสมหรือไม่ หรือฉันควรสอนพวกเขาไม่ให้ใช้มัน? มาจากพื้นหลัง C ++ RAII ความคิดที่ว่าคุณไม่จำเป็นต้องโทรหาคนอื่นfreeด้วยตนเองโดยเฉพาะอย่างยิ่งเสียงที่มีแนวโน้ม
18 c  teaching 

6
ฉันจะสละชื่อตัวแปรที่สั้นลงสำหรับรหัส“ columned” ที่ยาวขึ้นหรือไม่
ฉันเป็นนักเขียนโปรแกรมสมัครเล่นในชั้นเรียน CS ที่พยายามเรียนรู้ทักษะการเขียนโปรแกรมที่เหมาะสม นี่คือลักษณะของรหัสของฉันขอบของมันขยายไปถึง 103 คอลัมน์ int extractMessage(char keyWord[25], char cipherText[17424], int rowSize, char message[388]) { int keyColumn = 0; int cipherColumn = 0; int offset = 1; int nextWord = 1; int lengthOfWord = 0; int lengthOfCipher = 0; lengthOfWord = length(keyWord); lengthOfCipher = length(cipherText); while (keyWord[keyColumn] != cipherText[cipherColumn]) …
17 c  coding-style 

2
ในการเรียงตัวอักษรสตริงที่อยู่ติดกัน
C และ C ++ รวบรวมตัวอักษรสตริงที่อยู่ติดกันเป็นตัวอักษรสตริงเดียว ตัวอย่างเช่นนี้ "Some text..." "and more text" เทียบเท่ากับ: "Some text...and more text" ในภาษาตระกูล C อื่น ๆ เช่น C # หรือ Java นี่เป็นข้อผิดพลาดทางไวยากรณ์ (ซึ่งก็ดีมาก BTW) เหตุผล / เหตุผลทางประวัติศาสตร์สำหรับ C และ C ++ คืออะไร

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

7
วิธีการหลีกเลี่ยงข้อผิดพลาดของการวิเคราะห์แบบคงที่
ฉันทำงานที่ บริษัท ที่ทำคะแนนได้ 11 จาก Joel Test - อย่างน้อยก็ในกระดาษ อย่างไรก็ตามในทางปฏิบัติไม่มีอะไรทำงานได้ดีอย่างที่คาดหวังและโครงการนี้ใช้DEFCON 1มาครึ่งปีแล้ว ตอนนี้เพื่อนส่วนใหญ่ของฉันมีความสุขถ้าพวกเขาสามารถกลับบ้านเวลา 18.00 น. - ในวันอาทิตย์ หนึ่งในแนวทางปฏิบัติที่ดีที่ทำให้ฉันไม่ทำงานคือการใช้เครื่องมือวิเคราะห์แบบคงที่ โครงการทั้งสองแทร็ค GCC คำเตือน -Wall และเป็นกรรมสิทธิ์และมีราคาแพงมาก"C / C ++"เครื่องมือ คำเตือนของ Gcc ทำบ่อยกว่าไม่ได้ชี้ไปที่ข้อผิดพลาดที่แท้จริง อย่างไรก็ตามเครื่องมือที่เป็นกรรมสิทธิ์ของรายการสิ่งต่าง ๆ เช่นการปลดเปลื้องโดยปริยายและขนาดของตัวอักษรสตริง การปลดเปลื้องโดยนัยจะถูกขึ้นบัญชีดำในหนังสือสไตล์ของพวกเขาด้วย การปฏิบัติตามมาตรฐานคือผู้คนถูกกดเพื่อให้ทุกคำเตือนปิดขึ้น โปรดทราบว่านี่ไม่รวมคำเตือนที่เป็นเท็จบวกส่วนใหญ่นี่ไม่ใช่ปัญหา ผลลัพธ์คือ: ผู้คนเพิ่มการปลดเปลื้องประเภทให้กับทุกค่าและให้กับทุกข้อโต้แย้งที่ซ่อนชนิดที่มีปัญหาจริงในกระบวนการ ผู้คนแนะนำโดยข้อบกพร่องหนึ่งหรือใช้คุณสมบัติภาษาที่มีปัญหาที่แตกต่างกัน (strlen แทน sizeof, strncpy แทน strcpy ฯลฯ ) คำเตือนถูกปิดเสียง รายงานข้อผิดพลาดเริ่มกลิ้งเข้ามา ประเด็นหลักคือรหัสต้นฉบับนั้นทำงานและเขียนโดยคนที่เล่นอย่างปลอดภัยภายในความสามารถทางภาษาของพวกเขาในขณะที่การแก้ไขไม่ได้ ตอนนี้ฉันไม่คิดว่า บริษัท …

8
ฉันจะทำ TDD บนอุปกรณ์ฝังตัวได้อย่างไร
ฉันไม่ได้ใหม่กับการเขียนโปรแกรมและฉันได้ทำงานกับระดับต่ำ C และ ASM ใน AVR แต่ฉันไม่สามารถไปรอบ ๆ โครงการ C ขนาดใหญ่ที่ฝังตัวได้ ด้วยความเสื่อมของปรัชญารูดี้ของ TDD / BDD ฉันไม่สามารถเข้าใจได้ว่าผู้คนเขียนและทดสอบโค้ดเช่นนี้อย่างไร ฉันไม่ได้บอกว่ามันเป็นรหัสที่ไม่ดีฉันไม่เข้าใจว่ามันจะทำงานได้อย่างไร ฉันอยากจะเขียนโปรแกรมระดับล่างให้มากขึ้น แต่ฉันไม่รู้ว่าจะทำอย่างไรกับสิ่งนี้เพราะมันดูเหมือนความคิดที่แตกต่างไปจากเดิมอย่างสิ้นเชิงที่ฉันคุ้นเคย ฉันไม่มีปัญหาในการทำความเข้าใจตัวบ่งชี้ทางคณิตศาสตร์หรือการจัดสรรหน่วยความจำทำงานอย่างไร แต่เมื่อฉันเห็นว่าโค้ด C / C ++ ที่ซับซ้อนมีลักษณะอย่างไรเมื่อเทียบกับ Ruby ดูเหมือนว่ายากมาก ตั้งแต่ฉันสั่งบอร์ด Arduino มาเองฉันชอบที่จะเพิ่มระดับ C ที่ต่ำลงและเข้าใจวิธีการทำสิ่งต่าง ๆ ได้อย่างถูกต้อง แต่ดูเหมือนว่าไม่มีกฎของภาษาระดับสูงมาใช้ เป็นไปได้ไหมที่จะทำ TDD บนอุปกรณ์ฝังตัวหรือเมื่อพัฒนาไดรเวอร์หรือสิ่งต่าง ๆ เช่น bootloader แบบกำหนดเองเป็นต้น

6
คอมไพเลอร์ของ Fortran สร้างโค้ดได้เร็วกว่าคอมไพเลอร์ C จริงๆหรือ
เมื่อฉันเรียนในมหาวิทยาลัยฉันมักจะได้ยินความคิดที่ว่าคอมไพเลอร์ของ Fortran ผลิตโค้ดได้เร็วกว่าคอมไพเลอร์ C สำหรับโปรแกรมที่เทียบเท่า เหตุผลสำคัญที่เป็นเช่นนี้: คอมไพเลอร์ Fortran ปล่อยออกมาโดยเฉลี่ย 1,1 หน่วยประมวลผลคำสั่งต่อบรรทัดของรหัสในขณะที่ C คอมไพเลอร์ส่งเฉลี่ย 1.6 คำสั่งโปรเซสเซอร์ต่อบรรทัดของรหัส - ฉันไม่จำตัวเลขที่แน่นอน แต่ แนวคิดก็คือคอมไพเลอร์ C ปล่อยรหัสเครื่องจักรออกมาอย่างเห็นได้ชัดมากขึ้นดังนั้นจึงผลิตโปรแกรมที่ช้ากว่า การเปรียบเทียบดังกล่าวมีความถูกต้องอย่างไร เราสามารถพูดได้ว่าคอมไพเลอร์ Fortran ผลิตโปรแกรมได้เร็วกว่าคอมไพเลอร์ C หรือในทางกลับกันและทำไมความแตกต่างนี้จึงมีอยู่?

2
เหตุใดจึงไม่มี batching syscall ทั่วไปใน Linux / BSD
พื้นหลัง: ค่าใช้จ่ายในการโทรของระบบมีขนาดใหญ่กว่าค่าใช้จ่ายในการเรียกใช้ฟังก์ชัน (ประมาณช่วงจาก 20-100x) ส่วนใหญ่เกิดจากการสลับบริบทจากพื้นที่ผู้ใช้เป็นพื้นที่เคอร์เนลและด้านหลัง มันเป็นเรื่องธรรมดาที่ฟังก์ชั่นแบบอินไลน์เพื่อประหยัดค่าใช้จ่ายการเรียกใช้ฟังก์ชั่นและการเรียกใช้ฟังก์ชั่นมีราคาถูกกว่า syscalls มาก เหตุผลที่ผู้พัฒนาต้องการหลีกเลี่ยงบางส่วนของการเรียกใช้ระบบโดยดูแลการดำเนินการในเคอร์เนลให้มากที่สุดใน syscall เดียวเท่าที่จะทำได้ ปัญหา: นี้ได้สร้างจำนวนมาก (ฟุ่มเฟือย?) สายระบบเช่นsendmmsg () , recvmmsg ()เช่นเดียวกับ chdir เปิด lseek และ / หรือการรวมกัน symlink ที่ชอบ: openat, mkdirat, mknodat, fchownat, futimesat, newfstatat, unlinkat, fchdir, ftruncate, fchmod, renameat, linkat, symlinkat, readlinkat, fchmodat, faccessat, lsetxattr, fsetxattr, execveat, lgetxattr, llistxattr, lremovexattr, fremovexattr, …

2
การแปลงวิธี C ++ เป็นฟังก์ชัน C ด้วยอาร์กิวเมนต์ตัวชี้เป็นรูปแบบที่ยอมรับได้หรือไม่
ฉันใช้ C ++ กับ ESP-32 เมื่อลงทะเบียนตัวจับเวลาฉันต้องทำสิ่งนี้: timer_args.callback = reinterpret_cast<esp_timer_cb_t>(&SoundMixer::soundCallback); timer_args.arg = this; soundCallbackนี่โทรจับเวลา และสิ่งเดียวกันเมื่อลงทะเบียนงาน: xTaskCreate(reinterpret_cast<TaskFunction_t>(&SoundProviderTask::taskProviderCode), "SProvTask", stackSize, this, 10, &taskHandle); ดังนั้นวิธีการเริ่มต้นในงานที่แยกจากกัน GCC เตือนฉันเสมอเกี่ยวกับการแปลงเหล่านี้ แต่ทำงานได้ตามแผนที่วางไว้ เป็นที่ยอมรับในรหัสการผลิตหรือไม่ มีวิธีที่ดีกว่าในการทำเช่นนี้?
16 c++  c  functions 

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

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

10
ต้องการ Python มากกว่า C สำหรับการเขียนโปรแกรมอัลกอริทึม
ฉันกำลังศึกษาอัลกอริธึมเล็กน้อยและดูที่ไซต์อย่าง SPOJ.pl TopCoder เป็นต้นฉันเคยเห็นว่าโปรแกรมเมอร์ชอบ C หรือ C ++ สำหรับการแข่งขันเขียนโปรแกรมอัลกอริทึมส่วนใหญ่ ตอนนี้ฉันมีปัญหาบางอย่างเมื่อเร็ว ๆ นี้ ฉันรู้ทั้ง C และ Python เล็กน้อยและเมื่อพยายามเขียนรหัสฉันดูเหมือนจะชอบ Python มากกว่า C สำหรับอัลกอริธึมส่วนใหญ่ ทุกครั้งที่ฉันนั่งลงเพื่อเขียนรหัสใน CI ยอมแพ้หลังจากนั้นประมาณ 15 นาทีเพราะฉันพบว่ามันยุ่งยากเกินไปและมีแนวโน้มที่จะย้ายไปยังงูใหญ่ การผ่านการฝึกอบรมพอยน์เตอร์พอยน์เตอร์และอื่น ๆ ดูเหมือนจะเป็นเวลาที่ไร้ประโยชน์ที่ฉันสามารถใช้คิดเกี่ยวกับอัลกอริทึมได้จริง ตอนนี้ฉันรู้แล้วและได้ยินจากผู้คนมากมายว่า C เป็นภาษาที่สำคัญมากและเป็นขนมปังและเนยของโปรแกรมเมอร์จำนวนมาก สิ่งที่ฉันอยากรู้คือวิธีการของฉันนี้มีข้อบกพร่อง / ผลกระทบ / ข้อเสียอื่น ๆ หรือไม่ นี่ไม่ใช่การอภิปราย Python vs C; นี่เป็นคำถามเกี่ยวกับวิธีปฏิบัติที่เจาะจงของการเลือกไพ ธ อนมากกว่า C เนื่องจากความสะดวกในการใช้งานจะส่งผลกระทบต่อฉันหรือโปรแกรมเมอร์ / นักวิทยาศาสตร์คอมพิวเตอร์คนอื่น …

2
ภาพรวมที่ดีที่สุดสำหรับกระบวนทัศน์ C ++ ที่ทันสมัย? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันเคยเขียน C ++ อย่างกว้างขวางระหว่าง 8 และ 10 ปีที่แล้ว ฉันได้ย้ายไปยัง C # ด้วยเหตุผลมืออาชีพ อย่างไรก็ตามบางครั้งฉันเห็นข้อความชอบ "หากคุณยังคงติดตามการอ้างอิงตัวชี้ด้วยตนเองคุณกำลังทำผิด" หรือ "C ++ มีความปลอดภัยอย่างสมบูรณ์แบบตราบใดที่คุณใช้แนวคิดสมัยใหม่เช่น RAII และไม่ได้จัดสรรหน่วยความจำด้วยตนเองเช่นนักพัฒนา C ที่กู้คืน" ทั้งสองเป็นขั้นตอนมาตรฐานเมื่อสิบปีที่แล้ว ฉันได้เห็นว่า C ++ ได้รับการปรับปรุงอย่างมากในช่วงเวลาที่ผ่านมา; โดยเฉพาะอย่างยิ่ง C ++ 0x ดูเหมือนจะมีความสามารถใหม่ ๆ แหล่งข้อมูลที่ดีที่สุดสำหรับโปรแกรมเมอร์ "C / old C ++" …

8
ใช้ C ++ แต่ไม่ได้ใช้คุณสมบัติเฉพาะของภาษาควรเปลี่ยนเป็น C?
ฉันกำลังพัฒนาตัวจำลอง NES เป็นงานอดิเรกในเวลาว่าง ฉันใช้ C ++ เพราะเป็นภาษาที่ฉันใช้เป็นส่วนใหญ่รู้จักเป็นส่วนใหญ่และชอบมากที่สุด แต่ตอนนี้ฉันก้าวไปข้างหน้าในโครงการฉันรู้ว่าฉันไม่ได้ใช้คุณสมบัติเฉพาะของ C ++ และสามารถทำได้ใน C ธรรมดาและรับผลลัพธ์เดียวกัน ฉันไม่ได้ใช้เทมเพลตการใช้งานอุปกรณ์มากเกินไปความหลากหลายรูปแบบการสืบทอด แล้วคุณจะว่าอย่างไร ฉันควรอยู่ใน C ++ หรือเขียนใหม่ใน C? ฉันจะไม่ทำสิ่งนี้เพื่อเพิ่มประสิทธิภาพมันอาจมาเป็นผลข้างเคียง แต่ความคิดก็คือทำไมฉันต้องใช้ C ++ ถ้าฉันไม่ต้องการมัน? คุณลักษณะเฉพาะของ C ++ ที่ฉันใช้คือคลาสเพื่อห่อหุ้มข้อมูลและวิธีการ แต่ก็สามารถทำได้เช่นกันกับ structs และฟังก์ชั่นฉันใช้ใหม่และลบ แต่ก็สามารถใช้ malloc และฟรีและฉัน ใช้การสืบทอดสำหรับการเรียกกลับซึ่งสามารถทำได้ด้วยตัวชี้ไปยังฟังก์ชัน โปรดจำไว้ว่ามันเป็นโครงการงานอดิเรกฉันไม่มีกำหนดเวลาดังนั้นค่าใช้จ่ายและงานที่ต้องมีการเขียนใหม่ไม่ใช่ปัญหาอาจสนุกเช่นกัน ดังนั้นคำถามคือ C หรือ C ++
16 c++  c 

5
ทำไมไวยากรณ์ C สำหรับอาร์เรย์พอยน์เตอร์และฟังก์ชั่นจึงถูกออกแบบด้วยวิธีนี้
หลังจากได้เห็น (และถาม!) คำถามมากมายคล้ายกับ อะไรint (*f)(int (*a)[5])หมายถึงใน C? และถึงแม้จะเห็นว่าพวกเขาสร้างโปรแกรมเพื่อช่วยให้ผู้คนเข้าใจไวยากรณ์ของ C ฉันก็อดไม่ได้ที่จะสงสัยว่า: ทำไมไวยากรณ์ของ C จึงถูกออกแบบด้วยวิธีนี้ ตัวอย่างเช่นถ้าฉันออกแบบพอยน์เตอร์ฉันจะแปล "ตัวชี้ไปยังอาเรย์ของพอยน์เตอร์ 10 องค์ประกอบ" เป็น int*[10]* p; และไม่ int* (*p)[10]; ซึ่งฉันรู้สึกว่าคนส่วนใหญ่จะเห็นด้วยน้อยกว่ามาก ดังนั้นฉันสงสัยว่าทำไมไวยากรณ์เอ่อไม่ได้ใช้งานง่าย? มีปัญหาเฉพาะหรือไม่ที่ไวยากรณ์แก้ปัญหา (อาจเป็นความกำกวม?) ที่ฉันไม่รู้?
16 c  syntax 

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