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

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

21
ยืนยันความชั่วร้ายหรือไม่ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา Goผู้สร้างภาษาเขียน : ไปไม่ได้ให้การยืนยัน พวกเขาสะดวกสบายอย่างปฏิเสธไม่ได้ แต่ประสบการณ์ของเราคือผู้เขียนโปรแกรมใช้พวกเขาเป็นผู้ค้ำยันเพื่อหลีกเลี่ยงการคิดเกี่ยวกับการจัดการข้อผิดพลาดและการรายงานที่เหมาะสม การจัดการข้อผิดพลาดที่เหมาะสมหมายความว่าเซิร์ฟเวอร์ดำเนินการต่อหลังจากข้อผิดพลาดที่ไม่ร้ายแรงแทนที่จะล้มเหลว การรายงานข้อผิดพลาดที่เหมาะสมหมายความว่าข้อผิดพลาดนั้นเกิดขึ้นโดยตรงและตรงประเด็นช่วยให้โปรแกรมเมอร์ไม่สามารถตีความการติดตามข้อผิดพลาดจำนวนมากได้ ข้อผิดพลาดที่แม่นยำมีความสำคัญอย่างยิ่งเมื่อโปรแกรมเมอร์ที่เห็นข้อผิดพลาดไม่คุ้นเคยกับรหัส ความคิดเห็นของคุณเกี่ยวกับเรื่องนี้คืออะไร?
199 c++  c  error-handling  go  assert 


7
อะไรคือฟังก์ชั่น reentrant
ส่วนใหญ่ ของ ครั้งความหมายของ reentrance ที่ยกมาจากวิกิพีเดีย : โปรแกรมคอมพิวเตอร์หรือรูทีนถูกอธิบายว่าเป็น reentrant หากสามารถ เรียกได้อย่างปลอดภัยอีกครั้งก่อนที่การร้องขอก่อนหน้านี้จะเสร็จสมบูรณ์ (เช่นสามารถดำเนินการได้อย่างปลอดภัยพร้อมกัน) ในการเป็น reentrant โปรแกรมคอมพิวเตอร์หรือชุดคำสั่ง: ต้องไม่เก็บข้อมูลที่ไม่คงที่ (หรือทั่วโลก) ต้องไม่ส่งคืนที่อยู่เป็นข้อมูลคงที่ (หรือทั่วโลก) ที่ไม่ใช่ค่าคงที่ จะต้องทำงานเฉพาะกับข้อมูลที่ผู้โทรแจ้งมาเท่านั้น ต้องไม่พึ่งพาการล็อกกับรีซอร์สเดี่ยว ต้องไม่แก้ไขโค้ดของตัวเอง (ยกเว้นว่าจะดำเนินการในพื้นที่จัดเก็บเธรดเฉพาะของตนเอง) ต้องไม่เรียกโปรแกรมคอมพิวเตอร์หรือรูทีนที่ไม่ใช่ reentrant เป็นวิธีการที่ปลอดภัยที่กำหนดไว้? หากโปรแกรมสามารถดำเนินการได้อย่างปลอดภัยพร้อมกันก็หมายความว่ามันเป็น reentrant? อะไรคือเธรดทั่วไประหว่างจุดทั้งหกที่กล่าวถึงว่าฉันควรจำไว้ในขณะที่ตรวจสอบรหัสของฉันสำหรับความสามารถ reentrant นอกจากนี้ ฟังก์ชั่นการเรียกซ้ำทั้งหมดเป็น reentrant หรือไม่ ฟังก์ชั่น thread-safe ทั้งหมดถูก reentrant หรือไม่ ฟังก์ชันการเรียกซ้ำทั้งหมดและแบบปลอดภัยต่อการส่งข้อความ reentrant ทั้งหมดหรือไม่ ในขณะที่เขียนคำถามนี้สิ่งหนึ่งที่อยู่ในใจ: เงื่อนไขเช่นreentranceและความปลอดภัยแน่นอนที่ทุกคนคือพวกเขามีคำจำกัดความที่เป็นรูปธรรมหรือไม่? สำหรับถ้าไม่ใช่คำถามนี้ไม่มีความหมายมากนัก

21
มีเหตุผลทางเทคนิคหรือไม่ที่จะใช้> (<) แทนที่จะเป็น! = เมื่อเพิ่มขึ้นทีละ 1 ในลูป 'for'?
ฉันแทบจะไม่เห็นforลูปแบบนี้: for (int i = 0; 5 != i; ++i) {} มีเหตุผลทางเทคนิคที่จะใช้&gt;หรือ&lt;แทนที่จะ!=เพิ่มทีละ 1 เมื่อforวนซ้ำหรือไม่? หรือนี่เป็นแบบแผนมากกว่ากัน?
198 c++  c  for-loop 

8
return statement เทียบกับ exit () ใน main ()
ฉันควรใช้exit()หรือเพียงแค่returnงบในmain()? โดยส่วนตัวแล้วฉันชอบreturnคำแถลงเพราะฉันรู้สึกว่ามันเหมือนกับการอ่านฟังก์ชั่นอื่น ๆ และการควบคุมการไหลเมื่อฉันอ่านรหัสนั้นราบรื่น (ในความคิดของฉัน) และแม้ว่าฉันต้องการที่จะ refactor main()ฟังก์ชั่นที่มีดูเหมือนจะเป็นทางเลือกที่ดีกว่าreturnexit() มีexit()อะไรพิเศษที่returnทำไม่ได้เหรอ?
197 c++  c  coding-style  return  exit 


5
วิธีสร้างมาโครแบบผันแปร (จำนวนอาร์กิวเมนต์ที่ผันแปร)
ฉันต้องการเขียนแมโครใน C ที่ยอมรับพารามิเตอร์จำนวนเท่าใดก็ได้ไม่ใช่ตัวเลขที่เฉพาะเจาะจง ตัวอย่าง: #define macro( X ) something_complicated( whatever( X ) ) โดยที่Xจำนวนพารามิเตอร์ใด ๆ ฉันต้องการสิ่งนี้เพราะwhateverโอเวอร์โหลดและสามารถเรียกได้ด้วยพารามิเตอร์ 2 หรือ 4 ฉันพยายามกำหนดมาโครสองครั้ง แต่คำจำกัดความที่สองเขียนทับอันแรก! คอมไพเลอร์ที่ฉันทำงานด้วยคือ g ++ (โดยเฉพาะเจาะจงมากขึ้น mingw)

2
การดำเนินงาน &&& ในค
#include &lt;stdio.h&gt; volatile int i; int main() { int c; for (i = 0; i &lt; 3; i++) { c = i &amp;&amp;&amp; i; printf("%d\n", c); } return 0; } ผลลัพธ์ของโปรแกรมข้างต้นที่คอมไพล์ใช้gccคือ 0 1 1 ด้วย-Wallหรือ-Waddressตัวเลือกgccออกคำเตือน: warning: the address of ‘i’ will always evaluate as ‘true’ [-Waddress] การcประเมินในโปรแกรมข้างต้นเป็นอย่างไร

16
ฉันจะตรวจสอบระบบปฏิบัติการด้วยคำสั่งพรีโปรเซสเซอร์ได้อย่างไร
ฉันต้องการรหัสของฉันเพื่อทำสิ่งต่าง ๆ ตามระบบปฏิบัติการที่ได้รับการรวบรวม ฉันกำลังมองหาบางสิ่งเช่นนี้: #ifdef OSisWindows // do Windows-specific stuff #else // do Unix-specific stuff #endif มีวิธีทำเช่นนี้หรือไม่? มีวิธีที่ดีกว่าในการทำสิ่งเดียวกันหรือไม่?

11
การทำงานของโมดูโลที่มีจำนวนลบ
ในโปรแกรม C ฉันพยายามดำเนินการด้านล่าง (เพียงเพื่อตรวจสอบพฤติกรรม) x = 5 % (-3); y = (-5) % (3); z = (-5) % (-3); printf("%d ,%d ,%d", x, y, z); ให้ผลลัพธ์เป็น(2, -2 , -2)gcc ฉันคาดหวังผลลัพธ์ที่เป็นบวกทุกครั้ง โมดูลัสสามารถเป็นลบได้หรือไม่? ใครช่วยอธิบายพฤติกรรมนี้ได้บ้าง
195 c  gcc  modulo 

5
ตัวระบุรูปแบบที่ถูกต้องเพื่อพิมพ์ตัวชี้หรือที่อยู่?
ฉันควรใช้ตัวระบุรูปแบบใดเพื่อพิมพ์ที่อยู่ของตัวแปร ฉันสับสนระหว่างล็อตด้านล่าง % u - จำนวนเต็มไม่ได้ลงนาม % x - ค่าเลขฐานสิบหก % p - ตัวชี้โมฆะ รูปแบบใดที่เหมาะสมที่สุดในการพิมพ์ที่อยู่

30
ฉันจะตรวจสอบว่าจำนวนเต็มเป็นเลขคี่หรือคู่ได้อย่างไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ปิดให้บริการใน2 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันจะตรวจสอบว่าหมายเลขที่กำหนดเป็นเลขคู่หรือคี่ใน C ได้อย่างไร
193 c  integer 

27
การออกแบบเครื่องจักร C [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้นี้ ปิดให้บริการใน4 เดือนที่ผ่านมา ปรับปรุงคำถามนี้ ฉันกำลังสร้างโครงการขนาดเล็กในแบบผสม C และ C ++ ฉันกำลังสร้างเครื่องจักรเล็ก ๆ แห่งหนึ่งที่เป็นหัวใจของด้ายคนงานของฉัน ฉันสงสัยว่าคุณ gurus บน SO จะแบ่งปันเทคนิคการออกแบบเครื่องจักรของรัฐหรือไม่ หมายเหตุ:ฉันเป็นหลักหลังจากพยายามและทดสอบเทคนิคการใช้งาน อัปเดต:อิงจากอินพุตที่ยอดเยี่ยมทั้งหมดที่รวบรวมบน SO ฉันได้ตัดสินสถาปัตยกรรมนี้:

8
ทำงานในโครงการระยะไกลด้วย Eclipse ผ่าน SSH
ฉันมีกล่องดังต่อไปนี้: กล่อง Windows พร้อม Eclipse CDT กล่อง Linux สามารถเข้าถึงได้สำหรับฉันผ่าน SSH เท่านั้น ทั้งคอมไพเลอร์และฮาร์ดแวร์ที่จำเป็นในการสร้างและเรียกใช้โครงการของฉันมีเฉพาะในเครื่อง B ฉันต้องการทำงาน "โปร่งใส" จากกล่อง Windows ในโครงการนั้นโดยใช้ Eclipse CDT และสามารถสร้างรันและดีบักโครงการจากระยะไกลได้จากภายใน IDE ฉันจะตั้งค่าอย่างไร: อาคารจะทำงานอย่างไร วิธีแก้ปัญหาที่ง่ายกว่าการเขียน makefile โลคัลซึ่งrsyncโครงการจะเรียกใช้ makefile ระยะไกลเพื่อเริ่มต้นการสร้างจริงหรือไม่? Eclipse ที่มีการจัดการที่สร้างมีคุณสมบัติสำหรับการทำเช่นนั้น การแก้ไขข้อบกพร่องจะทำงานอย่างไร ควรทำดัชนีรหัส Eclipse CDT หรือไม่ ฉันต้องคัดลอกไฟล์ส่วนหัวที่จำเป็นทั้งหมดจากเครื่อง B ไปยังเครื่อง A และเพิ่มไฟล์เพื่อรวมเส้นทางด้วยตนเองหรือไม่

10
วัตถุประสงค์ -C: BOOL เทียบกับบูล
ฉันเห็น "ประเภทใหม่" BOOL( YES, NO) ฉันอ่านว่าประเภทนี้เกือบจะเหมือนตัวละคร สำหรับการทดสอบฉันทำ: NSLog(@"Size of BOOL %d", sizeof(BOOL)); NSLog(@"Size of bool %d", sizeof(bool)); ดีที่จะเห็นว่าทั้งสองบันทึกแสดง "1" (บางครั้งใน C ++ bool เป็น int และขนาดของมันคือ 4) ดังนั้นฉันแค่สงสัยว่ามีปัญหาบางอย่างเกี่ยวกับประเภทบูลหรืออะไร? ฉันสามารถใช้บูล (ซึ่งดูเหมือนว่าจะทำงาน) โดยไม่สูญเสียความเร็วได้หรือไม่
192 c  objective-c  types  boolean 

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