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

C เป็นภาษาโปรแกรมทั่วไปที่ใช้สำหรับการเขียนโปรแกรมระบบ (ระบบปฏิบัติการและฝังตัว), ห้องสมุด, เกมและข้ามแพลตฟอร์ม แท็กนี้ควรใช้กับคำถามทั่วไปที่เกี่ยวข้องกับภาษา C ตามที่กำหนดไว้ในมาตรฐาน ISO 9899 (เวอร์ชันล่าสุด 9899: 2018 เว้นแต่ระบุไว้เป็นอย่างอื่น - นอกจากนี้ยังติดแท็กคำขอเฉพาะรุ่นด้วย c89, c99, c11 ฯลฯ ) C แตกต่างจาก C ++ และไม่ควรใช้ร่วมกับแท็ก C ++ หากไม่มีเหตุผล

11
หลักการตั้งชื่อที่พบบ่อยที่สุดในภาษา C คืออะไร?
หลักการตั้งชื่อที่มักใช้ในภาษา C คืออะไร? ฉันรู้ว่ามีอย่างน้อยสอง: GNU / linux / K&R ที่มี lower_case_functions ? ชื่อ? ด้วยฟังก์ชั่น 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 …

8
ฉันจะบอก gcc ไม่ให้อินไลน์ฟังก์ชันได้อย่างไร
สมมติว่าฉันมีฟังก์ชันเล็ก ๆ นี้ในไฟล์ต้นฉบับ static void foo() {} และฉันสร้างไบนารีเวอร์ชันที่ปรับให้เหมาะสมแล้ว แต่ฉันไม่ต้องการให้ฟังก์ชันนี้อินไลน์ (เพื่อวัตถุประสงค์ในการเพิ่มประสิทธิภาพ) มีมาโครที่ฉันสามารถเพิ่มในซอร์สโค้ดเพื่อป้องกันการแทรกในหรือไม่
126 c  gcc  inline 

7
C อาร์เรย์ที่เติบโตแบบไดนามิก
ฉันมีโปรแกรมที่อ่านรายการเอนทิตีในเกม "ดิบ" และฉันตั้งใจจะสร้างอาร์เรย์ที่มีหมายเลขดัชนี (int) ของเอนทิตีที่ไม่แน่นอนสำหรับการประมวลผลสิ่งต่างๆ ฉันต้องการหลีกเลี่ยงการใช้หน่วยความจำหรือ CPU มากเกินไปในการรักษาดัชนีดังกล่าว ... วิธีแก้ปัญหาที่รวดเร็วและสกปรกที่ฉันใช้จนถึงตอนนี้คือการประกาศในฟังก์ชันการประมวลผลหลัก (โฟกัสเฉพาะที่) อาร์เรย์ที่มีขนาดของเอนทิตีเกมสูงสุดและจำนวนเต็มอื่นเพื่อติดตามจำนวนที่ถูกเพิ่มเข้าไปในรายการ สิ่งนี้ไม่น่าพอใจเนื่องจากทุกรายการมีอาร์เรย์มากกว่า 3,000 รายการซึ่งไม่มากนัก แต่รู้สึกว่าเป็นการสิ้นเปลืองเนื่องจากฉันจะใช้วิธีแก้ปัญหาได้ 6-7 รายการสำหรับฟังก์ชันที่แตกต่างกัน ฉันไม่พบโซลูชันเฉพาะ C (ไม่ใช่ C ++ หรือ C #) เพื่อให้บรรลุสิ่งนี้ ฉันสามารถใช้พอยน์เตอร์ได้ แต่ฉันค่อนข้างกลัวที่จะใช้มัน (เว้นแต่จะเป็นวิธีเดียวที่เป็นไปได้) อาร์เรย์จะไม่ออกจากขอบเขตฟังก์ชันโลคัล (จะถูกส่งต่อไปยังฟังก์ชันจากนั้นจึงละทิ้ง) ในกรณีที่มีการเปลี่ยนแปลงสิ่งต่างๆ หากพอยน์เตอร์เป็นทางออกเดียวฉันจะติดตามสิ่งเหล่านี้เพื่อหลีกเลี่ยงการรั่วไหลได้อย่างไร
126 c  dynamic-arrays 

12
การใช้ scanf () ในโปรแกรม C ++ จะเร็วกว่าการใช้ cin?
ฉันไม่รู้ว่าเป็นเรื่องจริงหรือเปล่า แต่เมื่อฉันอ่านคำถามที่พบบ่อยเกี่ยวกับปัญหาหนึ่งในการจัดหาเว็บไซต์ฉันพบบางอย่างที่กระตุ้นความสนใจของฉัน: ตรวจสอบวิธีอินพุต / เอาต์พุตของคุณ ใน C ++ การใช้ cin และ cout ช้าเกินไป ใช้สิ่งเหล่านี้และคุณจะรับประกันว่าจะไม่สามารถแก้ไขปัญหาใด ๆ ด้วยอินพุตหรือเอาต์พุตในปริมาณที่เหมาะสม ใช้ printf และ scanf แทน ใครช่วยชี้แจงเรื่องนี้ได้ไหม การใช้scanf ()ในโปรแกรม C ++ เร็วกว่าการใช้cin >> บางอย่างหรือไม่? ถ้าใช่การใช้งานในโปรแกรม C ++ เป็นวิธีปฏิบัติที่ดีหรือไม่? ฉันคิดว่ามันเป็นภาษา C เฉพาะแม้ว่าฉันจะเพิ่งเรียนรู้ C ++ ...
126 c++  c  performance  io 

8
ฉันสามารถใช้อะไรกับการแปลงอินพุตแทน scanf ได้บ้าง
ฉันเห็นผู้คนบ่อยครั้งทำให้ท้อแท้ไม่ให้ผู้อื่นใช้scanfและบอกว่ามีทางเลือกที่ดีกว่า อย่างไรก็ตามสิ่งที่ฉันเห็นคือ"ไม่ใช้scanf"หรือ"นี่คือสตริงรูปแบบที่ถูกต้อง"และไม่เคยมีตัวอย่างของ"ทางเลือกที่ดีกว่า"กล่าวถึงเลย ตัวอย่างเช่นลองใช้โค้ดตัวอย่างนี้: scanf("%c", &c); สิ่งนี้อ่านช่องว่างที่เหลืออยู่ในสตรีมอินพุตหลังจากการแปลงครั้งล่าสุด วิธีแก้ปัญหาที่แนะนำตามปกติสำหรับสิ่งนี้คือการใช้: scanf(" %c", &c); scanfหรือไม่ได้ใช้งาน ตั้งแต่scanfไม่ดีสิ่งที่บางตัวเลือก ANSI C สำหรับการแปลงรูปแบบการป้อนข้อมูลที่scanfจะสามารถจัดการ (เช่นจำนวนเต็มจำนวนจุดลอยตัวและสตริง) โดยไม่ต้องใช้scanf?
125 c  scanf 

22
C คอมไพเลอร์สำหรับ Windows? [ปิด]
ตามที่กล่าวมาในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดขึ้นมาใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันทำงานบน Linux ได้ดีโดยใช้ gcc เป็นคอมไพเลอร์ C ของฉัน แต่ต้องการโซลูชัน Windows ความคิดใด ๆ ? ฉันเคยดูDev-C ++ จาก Bloodshedแต่กำลังมองหาตัวเลือกเพิ่มเติม

7
ทำไม auto a = 1; รวบรวมใน C?
รหัส: int main(void) { auto a=1; return 0; } รวบรวมโดยไม่มีข้อผิดพลาดโดยคอมไพเลอร์ MS Visual Studio 2012 เมื่อไฟล์มีนามสกุล. c ฉันคิดมาตลอดว่าเมื่อคุณใช้นามสกุล. c การคอมไพล์ควรเป็นไปตามไวยากรณ์ C ไม่ใช่ C ++ ยิ่งไปกว่านั้นเท่าที่ฉันรู้ว่าอัตโนมัติที่ไม่มีประเภทนั้นอนุญาตให้ใช้เฉพาะใน C ++ ตั้งแต่ C ++ 11 ซึ่งหมายความว่าประเภทนั้นอนุมานจากตัวเริ่มต้น นั่นหมายความว่าคอมไพเลอร์ของฉันไม่ยึดติดกับ C หรือรหัสถูกต้องในภาษาซีจริงหรือไม่?
125 c  auto  c11 

29
คุณตรวจจับ / หลีกเลี่ยงการรั่วไหลของหน่วยความจำในรหัส (ไม่มีการจัดการ) ของคุณได้อย่างไร? [ปิด]
ตามที่กล่าวไว้ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ในโค้ด C / C ++ ที่ไม่มีการจัดการแนวทางปฏิบัติที่ดีที่สุดในการตรวจจับการรั่วไหลของหน่วยความจำคืออะไร? และแนวทางการเข้ารหัสเพื่อหลีกเลี่ยง? (ราวกับว่ามันง่ายมาก) เราเคยใช้วิธีโง่ ๆ ในอดีต: มีการเพิ่มตัวนับสำหรับการเรียกจัดสรรหน่วยความจำทุกครั้งและลดลงในขณะที่ว่าง ในตอนท้ายของโปรแกรมค่าตัวนับควรเป็นศูนย์ ฉันรู้ว่านี่ไม่ใช่วิธีที่ดีและมีการจับไม่กี่ครั้ง (ตัวอย่างเช่นหากคุณกำลังเพิ่มหน่วยความจำที่จัดสรรโดยการเรียก API ของแพลตฟอร์มจำนวนการจัดสรรของคุณจะไม่ตรงกับจำนวนการว่างของคุณแน่นอนจากนั้นเราจะเพิ่มตัวนับเมื่อเรียกการเรียก API ที่จัดสรรหน่วยความจำ) ฉันคาดหวังว่าประสบการณ์คำแนะนำของคุณและอาจมีการอ้างอิงถึงเครื่องมือที่ทำให้สิ่งนี้ง่ายขึ้น
125 c++  c  memory-leaks 

2
เหตุใด Clang จึงเพิ่มประสิทธิภาพออกไป x * 1.0 แต่ไม่ใช่ x + 0.0
เหตุใด Clang จึงเพิ่มประสิทธิภาพการวนซ้ำในโค้ดนี้ #include <time.h> #include <stdio.h> static size_t const N = 1 << 27; static double arr[N] = { /* initialize to zero */ }; int main() { clock_t const start = clock(); for (int i = 0; i < N; ++i) { arr[i] *= 1.0; } printf("%u ms\n", …



7
stdlib และเอาต์พุตสีใน C
ฉันกำลังสร้างแอปพลิเคชั่นง่ายๆที่ต้องการเอาต์พุตสี ฉันจะทำให้ผลลัพธ์ของฉันเป็นสีเช่น emacs และ bash ได้อย่างไร? ฉันไม่สนใจ Windows เนื่องจากแอปพลิเคชันของฉันใช้สำหรับระบบ UNIX เท่านั้น
125 c  colors  std  stdio 

5
ส่งผ่านอาร์กิวเมนต์บรรทัดคำสั่งใน Visual Studio 2010 หรือไม่
ฉันกำลังทำงานกับโครงการ C และไม่สามารถหาวิธีส่งอาร์กิวเมนต์บรรทัดคำสั่งไปยังฟังก์ชันหลักของฉันใน Visual Studio 2010 Express Edition ฉันต้องการแก้ไขข้อบกพร่อง - อาร์กิวเมนต์บรรทัดคำสั่งเหล่านี้ทำงานอย่างไร

4
ตัวระบุรูปแบบสำหรับ int สั้นที่ไม่ได้ลงชื่อคืออะไร
ฉันมีโปรแกรมดังต่อไปนี้ #include <stdio.h> int main(void) { unsigned short int length = 10; printf("Enter length : "); scanf("%u", &length); printf("value is %u \n", length); return 0; } ซึ่งเมื่อคอมไพล์โดยใช้gcc filename.cคำเตือนต่อไปนี้ (ในscanf()บรรทัด) warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 2 has type ‘short unsigned int *’ [-Wformat] จากนั้นผมก็อ้างถึงC99 …
125 c  scanf 

8
ฉันควรส่งคืน EXIT_SUCCESS หรือ 0 จาก main ()?
เป็นคำถามง่ายๆ แต่ฉันเห็นคำตอบที่ขัดแย้งกันอยู่เรื่อย ๆ : กิจวัตรหลักของโปรแกรม C ++ ควรกลับมา0หรือEXIT_SUCCESSไม่? #include <cstdlib> int main(){return EXIT_SUCCESS;} หรือ int main(){return 0;} เป็นสิ่งเดียวกันหรือไม่? ควรEXIT_SUCCESSใช้กับexit()? ฉันคิดว่าEXIT_SUCCESSน่าจะเป็นตัวเลือกที่ดีกว่าเพราะซอฟต์แวร์อื่น ๆ อาจต้องการให้ศูนย์เป็นความล้มเหลว แต่ฉันก็ได้ยินมาว่าถ้าคุณส่งคืน0คอมไพเลอร์ก็สามารถเปลี่ยนเป็นค่าอื่นได้
125 c++  c  return-value  main 

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