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

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

8
การใช้ if-return-return หรือ if-else-return นั้นมีประสิทธิภาพมากกว่าหรือไม่
สมมติว่าผมมีคำสั่งด้วยif returnจากมุมมองประสิทธิภาพฉันควรใช้ if(A > B): return A+1 return A-1 หรือ if(A > B): return A+1 else: return A-1 ฉันควรจะเลือกภาษาใดภาษาหนึ่งเมื่อใช้ภาษาที่รวบรวม (C) หรือภาษาสคริปต์ (Python)


3
จะรวบรวมไลบรารีแบบคงที่ใน Linux ได้อย่างไร?
ฉันมีคำถาม: วิธีการรวบรวมไลบรารีแบบคงที่ใน Linux ด้วยgccคือฉันต้องคอมไพล์ซอร์สโค้ดของฉันลงในไฟล์ชื่อ out.a. การคอมไพล์ด้วยคำสั่งนั้นเพียงพอgcc -o out.a out.cหรือไม่? ฉันไม่ค่อยคุ้นเคยgccหวังว่าใครจะช่วยฉันได้
141 c  gcc  static-libraries 

7
ตัวดำเนินการเชิงตรรกะที่ลัดวงจรได้รับคำสั่งหรือไม่? และลำดับการประเมินผล?
มาตรฐาน ANSI กำหนดให้ตัวดำเนินการเชิงตรรกะต้องทำการลัดวงจรใน C หรือ C ++ หรือไม่? ฉันสับสนเพราะฉันจำได้ว่าหนังสือ K&R บอกว่ารหัสของคุณไม่ควรขึ้นอยู่กับการดำเนินการเหล่านี้เพราะไฟฟ้าลัดวงจรเพราะอาจไม่ได้ ใครช่วยกรุณาชี้ให้เห็นว่าในมาตรฐานมันกล่าวว่าตรรกะ ops จะลัดวงจรเสมอ? ฉันสนใจ C ++ เป็นส่วนใหญ่คำตอบสำหรับ C ก็ยอดเยี่ยมเช่นกัน ฉันยังจำการอ่าน (จำไม่ได้ว่าอยู่ที่ไหน) ลำดับการประเมินนั้นไม่ได้ถูกกำหนดอย่างเข้มงวดดังนั้นโค้ดของคุณไม่ควรขึ้นอยู่กับหรือฟังก์ชั่นภายในนิพจน์จะถูกดำเนินการตามลำดับเฉพาะ: ในตอนท้ายของคำสั่ง จะได้รับการเรียก แต่คอมไพเลอร์มีอิสระในการเลือกคำสั่งที่มีประสิทธิภาพที่สุด มาตรฐานระบุลำดับการประเมินผลของนิพจน์นี้หรือไม่ if( functionA() && functionB() && functionC() ) cout<<"Hello world";


7
ขนาดของ enum ใน C คืออะไร?
ฉันกำลังสร้างชุดค่า enum แต่ฉันต้องการค่า enum แต่ละตัวที่มีความกว้าง 64 บิต ถ้าฉันจำได้อย่างถูกต้องโดยทั่วไป Enum จะมีขนาดเท่ากันกับ int แต่ฉันคิดว่าฉันอ่านที่ไหนสักแห่ง (อย่างน้อยใน GCC) คอมไพเลอร์สามารถทำให้ enum ความกว้างใด ๆ ที่พวกเขาต้องการเพื่อรักษาค่าของพวกเขา เป็นไปได้ไหมที่จะมี enum ที่กว้าง 64 บิต?
140 c  enums 

5
ไฟล์วัตถุใน C คืออะไร?
ฉันกำลังอ่านเกี่ยวกับไลบรารีใน C แต่ฉันยังไม่พบคำอธิบายเกี่ยวกับวัตถุไฟล์ อะไรคือความแตกต่างที่แท้จริงระหว่างไฟล์ที่คอมไพล์แล้วกับไฟล์ออบเจ็กต์? ฉันจะดีใจถ้ามีใครสามารถอธิบายเป็นภาษามนุษย์ได้

8
วัตถุประสงค์ของการใช้ -pedantic ในคอมไพเลอร์ GCC / G ++ คืออะไร?
หมายเหตุนี้ระบุว่า: -ansi: บอกให้คอมไพเลอร์ใช้ตัวเลือกภาษา ANSI สิ่งนี้จะปิด "คุณลักษณะ" บางอย่างของ GCC ซึ่งเข้ากันไม่ได้กับมาตรฐาน ANSI -pedantic: ใช้ร่วมกับ-ansiสิ่งนี้บอกให้คอมไพลเลอร์ปฏิบัติตามมาตรฐาน ANSI อย่างเคร่งครัดโดยปฏิเสธรหัสใด ๆ ที่ไม่เป็นไปตามข้อกำหนด สิ่งแรกแรก: วัตถุประสงค์ของการคืออะไร-pedanticและ-ansiตัวเลือกของคอมไพเลอร์ GCC / G ++ (ผมไม่เข้าใจคำอธิบายข้างต้น)? ใครช่วยบอกฉันถึงสถานการณ์ที่เหมาะสมในการใช้สองตัวเลือกนี้ ฉันควรใช้เมื่อใด มีความสำคัญหรือไม่?
140 c++  c  gcc  g++ 

8
ลงนามในการแปลงที่ไม่ได้ลงนามใน C - ปลอดภัยเสมอหรือไม่?
สมมติว่าฉันมีรหัส C ต่อไปนี้ unsigned int u = 1234; int i = -5678; unsigned int result = u + i; การแปลงโดยนัยเกิดขึ้นที่นี่และรหัสนี้ปลอดภัยสำหรับค่าทั้งหมดของuและiหรือไม่ (ปลอดภัยในแง่ที่แม้ว่าผลลัพธ์ในตัวอย่างนี้จะล้นไปเป็นจำนวนบวกจำนวนมาก แต่ฉันสามารถส่งกลับไปเป็นintและได้ผลลัพธ์ที่แท้จริง)
140 c  type-conversion 


9
เหตุใดคำสั่งสวิตช์จึงถูกออกแบบมาเพื่อให้หยุดพัก
รับงบสวิตช์ง่าย switch (int) { case 1 : { printf("1\n"); break; } case 2 : { printf("2\n"); } case 3 : { printf("3\n"); } } การขาดคำสั่ง break ในกรณีที่ 2 หมายความว่าการดำเนินการจะดำเนินการต่อภายในรหัสสำหรับกรณีที่ 3 นี่ไม่ใช่อุบัติเหตุ มันถูกออกแบบมาอย่างนั้น เหตุใดการตัดสินใจนี้จึงเกิดขึ้น สิ่งนี้มีประโยชน์อะไรเมื่อเทียบกับการมี semantic break อัตโนมัติสำหรับบล็อก เหตุผลคืออะไร
139 c  language-design 

11
การใช้คอมไพเลอร์ C ที่ล้าสมัยนั้นมีความเสี่ยงด้านความปลอดภัยหรือไม่?
เรามีระบบสร้างในการผลิตที่ไม่มีใครใส่ใจและเครื่องจักรเหล่านี้ใช้ GCC รุ่นโบราณเช่น GCC 3 หรือ GCC 2 และฉันไม่สามารถโน้มน้าวฝ่ายบริหารให้อัปเกรดเป็นรุ่นล่าสุดได้: พวกเขาพูดว่า "หากยังไม่พังไม่ต้องแก้ไข" เนื่องจากเรารักษาฐานรหัสเก่ามาก (เขียนในยุค 80) รหัส C89 นี้จึงรวบรวมได้ดีกับคอมไพเลอร์เหล่านี้ แต่ฉันไม่แน่ใจว่าควรใช้สิ่งเก่า ๆ เหล่านี้หรือไม่ คำถามของฉันคือ: การใช้คอมไพเลอร์ C ตัวเก่าสามารถลดความปลอดภัยของโปรแกรมที่คอมไพล์ได้ไหม UPDATE: รหัสเดียวกันนี้สร้างขึ้นโดย Visual Studio 2008 สำหรับเป้าหมาย Windows และ MSVC ยังไม่รองรับ C99 หรือ C11 (ฉันไม่ทราบว่า MSVC รุ่นใหม่ทำ) และฉันสามารถสร้างมันบนกล่อง Linux โดยใช้ GCC ล่าสุด ดังนั้นหากเราเพิ่งจะลดลงใน GCC รุ่นใหม่มันอาจจะสร้างได้ดีเหมือนเดิม
139 c  security  gcc 

16
คุณใช้คลาสใน C อย่างไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน12 เดือนที่ผ่านมา ปรับปรุงคำถามนี้ สมมติว่าฉันต้องใช้ C (ไม่มี C ++ หรือคอมไพเลอร์เชิงวัตถุ) และฉันไม่มีการจัดสรรหน่วยความจำแบบไดนามิกเทคนิคอะไรบ้างที่ฉันสามารถใช้ในการใช้คลาสหรือการประมาณคลาสที่ดี? เป็นความคิดที่ดีหรือไม่ที่จะแยก "class" เป็นไฟล์แยกต่างหาก? สมมติว่าเราสามารถจัดสรรหน่วยความจำล่วงหน้าโดยสมมติว่ามีอินสแตนซ์จำนวนคงที่หรือกำหนดการอ้างอิงไปยังแต่ละวัตถุเป็นค่าคงที่ก่อนเวลารวบรวม อย่าลังเลที่จะตั้งสมมติฐานเกี่ยวกับแนวคิดของ OOP ที่ฉันจะต้องนำไปใช้ (จะแตกต่างกัน) และแนะนำวิธีที่ดีที่สุดสำหรับแต่ละข้อ ข้อ จำกัด: ฉันต้องใช้ C และไม่ใช่ OOP เพราะฉันกำลังเขียนรหัสสำหรับระบบฝังตัวและคอมไพเลอร์และฐานรหัสที่มีอยู่ก่อนหน้านี้อยู่ใน C ไม่มีการจัดสรรหน่วยความจำแบบไดนามิกเพราะเรามีหน่วยความจำไม่เพียงพอที่จะสันนิษฐานว่าเราจะไม่หมดถ้าเราเริ่มการจัดสรรแบบไดนามิก คอมไพเลอร์ที่เราทำงานด้วยไม่มีปัญหากับพอยน์เตอร์ของฟังก์ชัน
139 c  class  oop  embedded 

18
ฟังก์ชัน itoa ใน Linux อยู่ที่ไหน
itoa()เป็นฟังก์ชั่นที่ใช้งานง่ายมากในการแปลงตัวเลขเป็นสตริง Linux ดูเหมือนจะไม่มีitoa()มีฟังก์ชั่นที่เทียบเท่าหรือฉันต้องใช้sprintf(str, "%d", num)หรือไม่?
139 c  linux 

2
วิธีการเปิดอ่านและเขียนจากพอร์ตอนุกรมใน C?
ฉันสับสนเล็กน้อยเกี่ยวกับการอ่านและการเขียนไปยังพอร์ตอนุกรม ฉันมีอุปกรณ์ USB ใน Linux ที่ใช้ไดรเวอร์อุปกรณ์แปลงอนุกรม FTDI USB เมื่อฉันเสียบมันจะสร้าง: / dev / ttyUSB1 ฉันคิดว่ามันจะง่ายต่อการเปิดและอ่าน / เขียนจากมันใน C. ฉันรู้อัตราการรับส่งข้อมูลและความเท่าเทียมกัน แต่ดูเหมือนว่ามันไม่มีมาตรฐานสำหรับเรื่องนี้? ฉันทำบางสิ่งบางอย่างหายไปหรือบางคนชี้ไปในทิศทางที่ถูกต้อง
139 c  linux  serial-port 

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