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

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

5
ฟังก์ชั่นการส่งคืนสตริงสไตล์ที่ดี?
ในโปรแกรม C ของฉันฉันมักต้องการวิธีในการสร้างการแสดงสตริงของ ADT ของฉัน แม้ว่าฉันไม่จำเป็นต้องพิมพ์สตริงไปที่หน้าจอ แต่อย่างใดมันก็เรียบร้อยที่จะมีวิธีการดังกล่าวสำหรับการดีบั๊ก ฟังก์ชันประเภทนี้มักเกิดขึ้น char * mytype_to_string( const mytype_t *t ); ฉันรู้จริงว่าฉันมี (อย่างน้อย) สามตัวเลือกที่นี่เพื่อจัดการหน่วยความจำสำหรับสตริงที่จะกลับมา ทางเลือก 1: การจัดเก็บสตริงส่งคืนในอาร์เรย์ char แบบคงที่ในฟังก์ชัน ฉันไม่ต้องการคิดมากนักยกเว้นว่าสตริงนั้นจะถูกเขียนทับทุกครั้งที่โทร ซึ่งอาจเป็นปัญหาในบางโอกาส ทางเลือกที่ 2: จัดสรรสตริงบนฮีพด้วย malloc ภายในฟังก์ชัน เรียบร้อยจริงๆตั้งแต่ฉันไม่ต้องคิดขนาดของบัฟเฟอร์หรือการเขียนทับ อย่างไรก็ตามฉันต้องจำให้ฟรี () สตริงเมื่อทำแล้วฉันยังต้องกำหนดให้กับตัวแปรชั่วคราวเช่นที่ฉันสามารถฟรี แล้วการจัดสรรฮีปจะช้ากว่าการจัดสรรสแต็คมากจริงๆดังนั้นจึงเป็นคอขวดถ้าทำซ้ำในลูป ทางเลือก 3: ส่งผ่านตัวชี้ไปยังบัฟเฟอร์และให้ผู้เรียกจัดสรรบัฟเฟอร์นั้น ชอบ: char * mytype_to_string( const mytype_t *mt, char *buf, size_t buflen ); …

1
เหตุใด GCC จึงเปลี่ยนจากวัวกระทิงเป็นตัวแยกวิเคราะห์แบบสืบซ้ำสำหรับ C ++ และ C
มีการเปลี่ยนแปลงภาษาที่ต้องใช้หรือมีเหตุผลบางอย่างที่ทำไมกระทิงจึงไม่เหมาะสมหรือเหมาะสมที่สุด? ฉันเห็นวิกิพีเดียว่าพวกเขาเปลี่ยนไปอ้างอิงถึงบันทึกย่อประจำรุ่นGCC 3.4และGCC 4.1 สถานะรีลีสโน้ตเหล่านี้: ตัวแยกวิเคราะห์ C ++ purser แบบเขียนซ้ำด้วยมือได้แทนที่ตัวแยกวิเคราะห์ C ++ ที่ได้จาก YACC จาก GCC รุ่นก่อนหน้า parser ใหม่มีโครงสร้างพื้นฐานที่พัฒนาขึ้นอย่างมากซึ่งจำเป็นสำหรับการแยกวิเคราะห์ซอร์สโค้ด C ++ ที่ดีขึ้นการจัดการส่วนขยายและการแยกที่สะอาด (ถ้าเป็นไปได้) ระหว่างการวิเคราะห์ซีแมนทิกส์ที่เหมาะสมและการแยกวิเคราะห์ parser ใหม่แก้ไขข้อบกพร่องมากมายที่พบใน parser เก่า และ: ตัวแยกวิเคราะห์ C และ Objective-C แบบเก่าของ Bison ถูกแทนที่ด้วยตัวแยกวิเคราะห์แบบเรียกซ้ำแบบสืบพันธุ์แบบเขียนด้วยมือที่เร็วขึ้น สิ่งที่ฉันอยากรู้คือปัญหาที่แท้จริงของพวกเขาคืออะไรและทำไมจึงเป็นไปไม่ได้ / วิธีแก้ปัญหาโดยใช้วัวกระทิง
10 c++  c  parsing  compiler 

3
ทำไมโครงสร้างที่อัดแน่นจึงไม่ได้เป็นส่วนหนึ่งของภาษา C
คอมไพเลอร์ C ทุกตัวมีตัวเลือกในการ "แพ็ค" โครงสร้าง C (เช่น__attribute__ ((__packed__))หรือ#pragma pack()) ตอนนี้เราทุกคนรู้ว่าจำเป็นต้องมีการบรรจุถ้าเราต้องการส่งหรือเก็บข้อมูลด้วยวิธีที่เชื่อถือได้ สิ่งนี้จะต้องเป็นข้อกำหนดตั้งแต่วันแรกของภาษา C ดังนั้นฉันสงสัยว่าทำไมโครงสร้างที่อัดแน่นจึงไม่ได้เป็นส่วนหนึ่งของข้อกำหนดภาษา C? พวกเขาไม่ได้อยู่ใน C99 หรือ C11 ถึงแม้ว่าความจำเป็นในการมีพวกเขาเป็นที่รู้จักกันมานานหลายทศวรรษแล้วหรือยัง? ฉันกำลังคิดถึงอะไร ทำไมคอมไพเลอร์จึงเจาะจง?
10 c 

5
มีข้อดีสำหรับโปรแกรมเมอร์ C ที่จะอ่าน K&R หรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา คำถามนี้หลอกหลอนฉันเพราะตอนนี้ฉันกำลังอ่านKernighan & Ritchie's: The C Programming Language (K&R) แต่ฉันเจอกันมากและฉันหมายถึงโปรแกรมเมอร์ของ C จำนวนมากที่ไม่เคยอ่าน ดังนั้นคำถามของฉันคือ: มีประโยชน์ในการอ่าน K & R หรือไม่? ควรจะมีความจำเป็นหรือไม่?
10 c 

5
คีย์เวิร์ดการลงทะเบียนจะมีประโยชน์จริงใน C เมื่อใด
ฉันกำลังสับสนเกี่ยวกับการใช้registerคำหลักใน C. มันจะบอกกันโดยทั่วไปว่าการใช้งานไม่จำเป็นต้องเหมือนในคำถามนี้ใน StackOverflow คำหลักนี้ซ้ำซ้อนทั้งหมดใน C เนื่องจากคอมไพเลอร์สมัยใหม่หรือมีสถานการณ์ที่ยังคงมีประโยชน์หรือไม่ ถ้าใช่มีสถานการณ์อะไรบ้างที่การใช้registerคำหลักมีประโยชน์จริง ๆ
10 c  keywords 

7
ฉันเชื่อว่าฉันมีรหัส C และ C ++ ผสมกันเมื่อฉันไม่ควรมี; นี่เป็นปัญหาและวิธีแก้ไขหรือไม่
พื้นหลัง / สถานการณ์ ฉันเริ่มเขียนแอปพลิเคชัน CLI อย่างหมดจดใน C (โปรแกรม C หรือ C ++ ที่เหมาะสมครั้งแรกของฉันที่ไม่ใช่ "Hello World" หรือรูปแบบอื่น ๆ ของมัน) ประมาณครึ่งทางผ่านฉันทำงานกับ "สตริง" ของอินพุตของผู้ใช้ (อาร์เรย์อาร์เรย์) และฉันค้นพบวัตถุลำแสงสตริง C ++ ฉันเห็นว่าฉันสามารถบันทึกรหัสโดยใช้สิ่งเหล่านี้ได้ดังนั้นฉันจึงใช้มันผ่านแอปพลิเคชัน ซึ่งหมายความว่าฉันมีการเปลี่ยนแปลงนามสกุลไฟล์ที่จะ .cpp และตอนนี้รวบรวม app กับแทนg++ gccดังนั้นตามนี้ฉันจะบอกว่าแอปพลิเคชันตอนนี้เป็นแอปพลิเคชั่นทางเทคนิค C ++ (แม้ว่า 90% + ของรหัสจะถูกเขียนในสิ่งที่ฉันจะเรียก C เนื่องจากมีการข้ามไปมาระหว่างสองภาษาจำนวนมาก ทั้งสอง). เป็นไฟล์. cpp ไฟล์เดียวยาวประมาณ 900 บรรทัด ปัจจัยสำคัญ ฉันต้องการให้โปรแกรมฟรี (เป็นเงิน) และสามารถแจกจ่ายได้อย่างอิสระและใช้ได้สำหรับทุกคน …
10 c++  c 

5
มีวิธีการใช้ gcc เป็นห้องสมุดหรือไม่?
ทุกคนรู้วิธีแก้ปัญหาที่ใช้งานได้เช่นนี้: #include <stdio.h> #include <gcc.h> /* This .h is what I'm looking for. */ int main (void) { /* variables declaration (...) */ /* The following line is supposed to be equivalent to: * $ gcc main.c -o main */ results = gcc_compile_and_link("main.c", "main"); /* Now I want to use …
10 c++  c  gcc 

1
ขนาดบัฟเฟอร์ที่เหมาะสมที่สุดสำหรับ fread / fwrite [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน7 ปีที่ผ่านมา ขนาดบัฟเฟอร์ใดที่ฉันควรเลือกสำหรับอ่าน / เขียนไฟล์ผ่านฟังก์ชั่น POSIX fread / fwrite
10 c 

5
ดีกว่าที่จะใช้คำสั่ง preprocessor หรือคำสั่ง (คงที่)?
สมมติว่าเรามี codebase ที่ใช้สำหรับ costumers ที่แตกต่างกันมากมายและเรามี code บางอย่างที่เกี่ยวข้องกับ costumers ประเภท X ควรใช้คำสั่ง preprocessor เพื่อรวมรหัสนี้เฉพาะใน costumer ประเภท X หรือ ใช้ถ้ามีคำสั่ง? เพื่อให้ชัดเจน: // some code #if TYPE_X_COSTUMER = 1 // do some things #endif // rest of the code หรือ if(TYPE_X_COSTUMER) { // do some things } ข้อโต้แย้งที่ฉันคิดได้คือ: ตัวประมวลผลคำสั่งล่วงหน้ามีโค้ดขนาดเล็กลงและกิ่งน้อยลง หากผลลัพธ์ของคำสั่งที่มีรหัสที่คอมไพล์เสมอเช่นถ้ามีคนทำผิดพลาดที่จะเป็นอันตรายต่อรหัสที่ไม่เกี่ยวข้องสำหรับโครงการที่เขาทำงานอยู่ข้อผิดพลาดจะยังคงปรากฏขึ้นและเขาจะไม่ทำให้ฐานรหัสเสียหาย มิฉะนั้นเขาจะไม่รับรู้ถึงความเสียหาย ฉันถูกบอกเสมอว่าชอบการใช้งานตัวประมวลผลมากกว่าการใช้งานตัวประมวลผลล่วงหน้า (ถ้านี่คืออาร์กิวเมนต์เลย …
10 c++  c 

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

5
ข้อผิดพลาดในการออกแบบ API ใน C [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว มีข้อบกพร่องอะไรบ้างที่ผลักดันคุณให้คลั่งไคล้ใน C APIs (รวมถึงห้องสมุดมาตรฐานห้องสมุดบุคคลที่สามและส่วนหัวภายในโครงการ) เป้าหมายคือการระบุข้อผิดพลาดในการออกแบบ API ใน C ดังนั้นผู้ที่เขียนไลบรารี C ใหม่สามารถเรียนรู้จากความผิดพลาดในอดีต อธิบายว่าเหตุใดข้อบกพร่องจึงไม่ดี (ควรเป็นตัวอย่าง) และพยายามเสนอการปรับปรุง แม้ว่าวิธีการแก้ปัญหาของคุณอาจไม่สามารถใช้งานได้จริงในชีวิตจริง (มันสายเกินไปที่จะแก้ไขstrncpy) แต่ก็ควรให้ความสำคัญกับนักเขียนห้องสมุดในอนาคต แม้ว่าจุดเน้นของคำถามนี้คือ C APIs แต่ปัญหาที่ส่งผลต่อความสามารถในการใช้ภาษาเหล่านี้ในภาษาอื่นก็สามารถทำได้ โปรดให้หนึ่งข้อบกพร่องต่อคำตอบเพื่อประชาธิปไตยสามารถเรียงลำดับคำตอบ
10 c  api-design  pitfalls 

5
การพิสูจน์ตัวเองในอนาคตเมื่อเรียนรู้การเขียนโปรแกรม [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน3 ปีที่ผ่านมา ฉันต้องการเรียนรู้ที่จะเขียนโปรแกรมในลักษณะ 'พิสูจน์อนาคต' หากคุณต้องการ ในขณะที่ Windows เป็นผู้ครอบครองตลาดระบบปฏิบัติการเดสก์ท็อป (ตอนนี้) เห็นได้ชัดว่ามีค่ามากในการเรียนรู้ภาษา / กรอบ / API และอื่น ๆ - นี่อาจเปลี่ยนแปลงได้เมื่ออุปกรณ์ใหม่โผล่ออกมาหรือ Windows ยิงตัวเองออกมา ภาพตัวอย่างที่เป็นมิตรกับ Windows 8 นั้นดูไม่น่าดึงดูดนัก ... ฉันจะถูกคิดว่ามีความรู้ที่แข็งแกร่งของ C / C ++ สำหรับตรรกะ back-end / การเขียนโปรแกรมระดับต่ำและชอบรวมกับภาษาพกพามากเช่น Java สำหรับ GUI และอื่น ๆ จะเป็นพื้นฐานที่ดีสำหรับการพัฒนาซอฟต์แวร์ ที่จะพิสูจน์ว่ามีประโยชน์ในระบบจำนวนมากที่สุด? …
10 java  c++  c  portability 

7
การพกพาภาษา C
ความสะดวกในการพกพาของภาษาอย่าง C นั้นถูกกำหนดอย่างไร? ฉันได้เรียนรู้ว่าคอมไพเลอร์เฉพาะ ISA หากเป็นจริง C พกพาได้อย่างไร? หรือว่าเป็นเพียงซอร์สโค้ดที่เขียนใน C เป็นแบบพกพา แต่ไม่ใช่ไฟล์ปฏิบัติการ? ISA ของ executables ที่เฉพาะเจาะจงสำหรับตัวอย่างแอปพลิเคชันสำหรับ x86 ไม่ได้แยกจากแอปพลิเคชันสำหรับ Apple (สมมติว่า Apple ใช้ไมโครโปรเซสเซอร์ Motorola / PowerPC)
10 c  languages 

3
เมื่อใดที่ฟังก์ชันตรีโกณมิติที่มีอาร์กิวเมนต์องศาให้ส่งคืน -0.0
ในการสร้างฟังก์ชั่นหนุนmy_sind(d), my_cosd(d), my_tand(d)ที่ใช้ในการโต้แย้งการศึกษาระดับปริญญามากกว่าเรเดียนหนึ่งและให้การตอบแน่นอนที่หลาย 90 ผมสังเกตเห็นว่าผลที่ได้บางครั้งมากกว่า-0.00.0 my_sind( 0.0) --> 0.0 my_sind(-0.0) --> -0.0 my_sind(180.0) --> -0.0 my_sind(360.0) --> 0.0 sin()และtan()โดยทั่วไปแล้วจะส่งกลับผลลัพธ์เป็นศูนย์สัญญาณเดียวกันสำหรับสัญญาณเข้าศูนย์ที่กำหนด มันสมเหตุสมผลที่my_sin()ควรตรงกับsin()อินพุตเหล่านั้น my_sind( 0.0) alike sin( 0.0) --> 0.0 my_sind(-0.0) alike sin(-0.0) --> -0.0 คำถามคือ : สำหรับสิ่งที่จำนวนทั้งหมดnon_zero_nควร / อาจผลที่เคยกลับ-0.0สำหรับmy_sind(180*non_zero_n), my_cosd(180*n + 180), my_tand(180*non_zero_n)? มันง่ายพอที่จะเขียนโค้ดเพื่อf(-0.0)สร้าง-0.0และทำกับมันเท่านั้น ง่าย ๆ ที่สงสัยว่ามีเหตุผลใดที่จะทำให้คนอื่น ๆ f(x)ผลตอบแทน-0.0ใด ๆ อื่น ๆ …
10 c  math 

3
Clang / LLVM พร้อมสำหรับช่วงไพร์มหรือไม่? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา เสียงดังกราวสามารถใช้แทน gcc? ประสบการณ์ของคุณเกี่ยวกับสิ่งนั้น? มีข้อเสียอะไรบ้าง? ประสิทธิภาพของการคอมไพล์ดีกว่า gcc มาก แต่ประสิทธิภาพของโค้ดที่สร้างขึ้นเมื่อรันมัน? มีเครื่องมือที่ดีเป็น front-end (IDE) ให้ทำงานบน Linux หรือ Windows หรือไม่? แก้ไข: ฉันหมายถึงคอมไพเลอร์ C C ++ มันยังไม่ค่อยดีเท่าไหร่

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