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

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


18
คีย์เวิร์ด“ register” ใน C?
อะไรregisterคำหลักทำในภาษา C? ฉันได้อ่านแล้วว่ามันใช้สำหรับการปรับให้เหมาะสม แต่ไม่ได้กำหนดไว้อย่างชัดเจนในมาตรฐานใด ๆ มันยังเกี่ยวข้องหรือไม่และถ้าเป็นเช่นนั้นคุณจะใช้มันเมื่อไหร่?
273 c  memory  keyword 

4
ความแตกต่างระหว่างวัตถุที่ใช้ร่วมกัน (.so), ไลบรารีแบบคงที่ (.a) และ DLL ของ (.so) หรือไม่
ฉันมีส่วนร่วมในการอภิปรายบางอย่างเกี่ยวกับห้องสมุดใน Linux และต้องการยืนยันบางสิ่ง มันเป็นความเข้าใจของฉัน (โปรดแก้ไขให้ฉันถ้าฉันผิดและฉันจะแก้ไขโพสต์ของฉันในภายหลัง) ว่ามีสองวิธีในการใช้ห้องสมุดเมื่อสร้างแอปพลิเคชัน: สแตติกไลบรารี (ไฟล์. a): ณ เวลาลิงก์สำเนาของไลบรารีทั้งหมดจะถูกใส่ลงในแอปพลิเคชันสุดท้ายเพื่อให้ฟังก์ชั่นภายในไลบรารีพร้อมใช้งานสำหรับแอปพลิเคชันการโทรตลอดเวลา วัตถุที่ใช้ร่วมกัน (ไฟล์. so): ณ เวลาลิงก์วัตถุนั้นจะถูกตรวจสอบกับ API ผ่านไฟล์ส่วนหัว (.h) ที่เกี่ยวข้อง ห้องสมุดไม่ได้ใช้จริงจนกว่ารันไทม์ซึ่งเป็นที่ต้องการ ข้อได้เปรียบที่ชัดเจนของสแตติกไลบรารีคือพวกเขาอนุญาตให้แอปพลิเคชันทั้งหมดอยู่ในตัวเองในขณะที่ประโยชน์ของไลบรารีแบบไดนามิกคือสามารถแทนที่ไฟล์ ".so" (เช่น: ในกรณีที่จำเป็นต้องอัปเดตเนื่องจากความปลอดภัย บั๊ก) โดยไม่ต้องการให้แอปพลิเคชันพื้นฐานทำการคอมไพล์ใหม่ ฉันเคยได้ยินบางคนสร้างความแตกต่างระหว่างวัตถุที่ใช้ร่วมกันและไลบรารีที่เชื่อมโยงแบบไดนามิก (DLL's) แม้ว่าพวกเขาจะเป็นทั้งไฟล์ ".so" ก็ตาม มีความแตกต่างระหว่างวัตถุที่ใช้ร่วมกันและ DLLs เมื่อมันมาถึงการพัฒนา C / C ++ บน Linux หรือระบบปฏิบัติการที่สอดคล้องกับ POSIX อื่น ๆ (เช่น: MINIX, UNIX, QNX, ฯลฯ …
272 c++  c  linux  dll  linker 

13
วิธีกำหนดประเภท enum (enum) ใน C เป็นอย่างไร
ฉันไม่แน่ใจว่าเป็นไวยากรณ์ที่เหมาะสมสำหรับการใช้ C enums อะไร ฉันมีรหัสต่อไปนี้: enum {RANDOM, IMMEDIATE, SEARCH} strategy; strategy = IMMEDIATE; แต่สิ่งนี้ไม่ได้คอมไพล์ด้วยข้อผิดพลาดต่อไปนี้: error: conflicting types for ‘strategy’ error: previous declaration of ‘strategy’ was here ผมทำอะไรผิดหรือเปล่า?
272 c  enums 

17
ทำไมต้องใช้การเปลี่ยนทิศทางแบบคู่ หรือทำไมต้องใช้พอยน์เตอร์กับพอยน์เตอร์?
เมื่อใดควรใช้การเปลี่ยนทิศทางแบบคู่ใน C มีใครอธิบายได้บ้างไหม? สิ่งที่ฉันรู้คือว่าการเบี่ยงเบนสองครั้งเป็นตัวชี้ไปยังตัวชี้ ทำไมฉันต้องใช้ตัวชี้ไปยังตัวชี้?
272 c  pointers 

13
เครื่องหมายคำถามและเครื่องหมายทวิภาค (?: ตัวดำเนินการประกอบไปด้วยสามส่วน) หมายถึงอะไรในวัตถุประสงค์ -c
บรรทัดโค้ดนี้มีความหมายว่าอย่างไร label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect; ?และ:สร้างความสับสนให้ฉัน

23
ฉันจะรับไดเรกทอรีที่โปรแกรมกำลังทำงานได้อย่างไร
มีวิธีที่ไม่เชื่อเรื่องพระเจ้าแพลตฟอร์มและระบบไม่เชื่อเรื่องพระเจ้าเพื่อให้ได้เส้นทางแบบเต็มของไดเรกทอรีจากที่โปรแกรมกำลังทำงานโดยใช้ C / C ++? เพื่อไม่ให้สับสนกับไดเรกทอรีการทำงานปัจจุบัน (โปรดอย่าแนะนำห้องสมุดเว้นแต่ว่าเป็นไลบรารีมาตรฐานเช่น clib หรือ STL) (หากไม่มีวิธีการแพลตฟอร์ม / ระบบไม่เชื่อเรื่องพระเจ้าคำแนะนำที่ทำงานใน Windows และ Linux สำหรับระบบไฟล์ที่เฉพาะเจาะจงก็ยินดีต้อนรับเช่นกัน)
269 c++  c  working-directory 

30
จะหลีกเลี่ยงการเชื่อมโยง“ ถ้า” ได้อย่างไร?
สมมติว่าฉันมีรหัสหลอกนี้: bool conditionA = executeStepA(); if (conditionA){ bool conditionB = executeStepB(); if (conditionB){ bool conditionC = executeStepC(); if (conditionC){ ... } } } executeThisFunctionInAnyCase(); ฟังก์ชั่นexecuteStepXควรจะดำเนินการถ้าหากว่าก่อนหน้านี้ประสบความสำเร็จ ไม่ว่าในกรณีใดexecuteThisFunctionInAnyCaseฟังก์ชันควรถูกเรียกใช้ในตอนท้าย ฉันเป็นมือใหม่ในการเขียนโปรแกรมดังนั้นขออภัยสำหรับคำถามพื้นฐานมาก: มีวิธี (ใน C / C ++ เป็นต้น) เพื่อหลีกเลี่ยงifสายโซ่ยาว ๆ ที่ผลิต "pyramid of code" ที่ค่าใช้จ่ายของการอ่านรหัสได้ง่าย ? ฉันรู้ว่าถ้าเราสามารถข้ามการexecuteThisFunctionInAnyCaseเรียกใช้ฟังก์ชันรหัสอาจง่ายขึ้นเป็น: bool conditionA = executeStepA(); if (!conditionA) return; …

8
การเปิดไฟล์ทำหน้าที่อะไร
ในทุกภาษาการเขียนโปรแกรม (ที่ฉันใช้เป็นอย่างน้อย) คุณต้องเปิดไฟล์ก่อนจึงจะสามารถอ่านหรือเขียนได้ แต่สิ่งที่เปิดดำเนินการจริงทำอะไร? หน้าคู่มือสำหรับฟังก์ชั่นทั่วไปอย่าบอกอะไรเลยนอกจาก 'เปิดไฟล์สำหรับอ่าน / เขียน': http://www.cplusplus.com/reference/cstdio/fopen/ https://docs.python.org/3/library/functions.html#open เห็นได้ชัดว่าผ่านการใช้งานฟังก์ชั่นที่คุณสามารถบอกได้ว่ามันเกี่ยวข้องกับการสร้างวัตถุบางชนิดที่เอื้อต่อการเข้าถึงไฟล์ อีกวิธีหนึ่งในการวางสิ่งนี้คือถ้าฉันจะใช้openฟังก์ชั่นมันต้องทำอะไรบน Linux?
266 c  linux 


3
ทำไมโอเปอเรเตอร์ลูกศร (->) ใน C จึงมีอยู่
ตัวดำเนินการ dot ( .) ใช้เพื่อเข้าถึงสมาชิกของ struct ในขณะที่โอเปอเรเตอร์ arrow ( ->) ใน C ใช้เพื่อเข้าถึงสมาชิกของ struct ที่อ้างอิงโดยตัวชี้ที่เป็นปัญหา ตัวชี้ไม่มีสมาชิกใด ๆ ที่สามารถเข้าถึงได้ด้วยตัวดำเนินการ dot (จริง ๆ แล้วเป็นเพียงตัวเลขที่อธิบายตำแหน่งในหน่วยความจำเสมือนดังนั้นจึงไม่มีสมาชิกใด ๆ ) ดังนั้นจะไม่มีความกำกวมหากเราเพิ่งกำหนดตัวดำเนินการจุดเพื่อยกเลิกการลงทะเบียนตัวชี้โดยอัตโนมัติหากมีการใช้งานบนตัวชี้ เหตุใดผู้สร้างภาษาจึงตัดสินใจสร้างสิ่งที่ซับซ้อนมากขึ้นด้วยการเพิ่มโอเปอเรเตอร์ที่ไม่จำเป็น การตัดสินใจออกแบบครั้งใหญ่คืออะไร?
264 c  pointers  dereference 

14
ฉันจะสร้างอาร์เรย์ของสตริงใน C ได้อย่างไร
ฉันกำลังพยายามสร้างอาร์เรย์ของสตริงใน C หากฉันใช้รหัสนี้: char (*a[2])[14]; a[0]="blah"; a[1]="hmm"; gcc ให้ฉัน "คำเตือน: การกำหนดจากประเภทตัวชี้ที่เข้ากันไม่ได้" วิธีที่ถูกต้องในการทำเช่นนี้คืออะไร? แก้ไข: ฉันอยากรู้ว่าทำไมสิ่งนี้ควรให้คำเตือนคอมไพเลอร์เพราะถ้าฉันทำprintf(a[1]);มันพิมพ์ "hmm" อย่างถูกต้อง
263 c  arrays  string 

10
เพดานอย่างรวดเร็วของการหารจำนวนเต็มใน C / C ++
รับค่าจำนวนเต็มxและyC และ C ++ กลับทั้งสองเป็นผลหารหารq = x/yด้วยจำนวนจุดลอยตัว ฉันสนใจวิธีการคืนเพดานแทน ยกตัวอย่างเช่นและceil(10/5)=2ceil(11/5)=3 วิธีการที่ชัดเจนเกี่ยวข้องกับสิ่งที่ชอบ: q = x / y; if (q * y < x) ++q; สิ่งนี้ต้องการการเปรียบเทียบและการคูณที่พิเศษ และวิธีการอื่น ๆ ที่ผมเคยเห็น (ใช้ในความเป็นจริง) เกี่ยวข้องกับการหล่อเป็นหรือfloat doubleมีวิธีที่ตรงกว่าที่จะหลีกเลี่ยงการเพิ่มการคูณ (หรือการหารที่สอง) และสาขาและหลีกเลี่ยงการร่ายเป็นเลขทศนิยมหรือไม่?
262 c++  c  algorithm  math 


10
ประเภทที่ตามด้วย _t (ขีดล่าง -t) หมายถึงอะไร
ดูเหมือนว่าเป็นคำถามง่าย ๆ แต่ฉันไม่พบด้วยการค้นหา Stack Overflow หรือ Google ประเภทใดตามด้วย_tค่าเฉลี่ย เช่น int_t anInt; ฉันเห็นรหัส C จำนวนมากเพื่อจัดการกับฮาร์ดแวร์อย่างใกล้ชิดฉันอดไม่ได้ที่จะคิดว่ามันเกี่ยวข้องกัน

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