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

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

17
จะเกิดอะไรขึ้นเมื่อคุณไม่ว่างหลังจาก malloc?
นี่เป็นสิ่งที่รบกวนฉันมานานแล้ว เราทุกคนได้รับการสอนในโรงเรียน (อย่างน้อยฉันเป็น) ที่คุณต้องเป็นอิสระทุกตัวชี้ที่ได้รับการจัดสรร แต่ฉันก็อยากรู้อยากเห็นเกี่ยวกับต้นทุนที่แท้จริงของการไม่เพิ่มหน่วยความจำ ในบางกรณีที่เห็นได้ชัดเช่นเมื่อmallocมีการเรียกภายในลูปหรือส่วนหนึ่งของการประมวลผลเธรดเป็นสิ่งสำคัญมากที่จะต้องว่างดังนั้นจึงไม่มีหน่วยความจำรั่วไหล แต่ลองพิจารณาสองตัวอย่างต่อไปนี้: ก่อนอื่นถ้าฉันมีรหัสนั่นเป็นอย่างนี้: int main() { char *a = malloc(1024); /* Do some arbitrary stuff with 'a' (no alloc functions) */ return 0; } ผลลัพธ์ที่แท้จริงที่นี่คืออะไร ความคิดของฉันคือกระบวนการตายแล้วพื้นที่ฮีปก็หายไปดังนั้นจึงไม่มีอันตรายใด ๆ ในการที่จะพลาดการเรียกfree(แต่ฉันตระหนักถึงความสำคัญของการมีมันต่อไปสำหรับการปิดการบำรุงรักษาและการปฏิบัติที่ดี) ฉันคิดถูกไหม? ประการที่สองสมมติว่าฉันมีโปรแกรมที่ทำหน้าที่เหมือนเชลล์ ผู้ใช้สามารถประกาศตัวแปรเช่นaaa = 123นั้นและจะถูกเก็บไว้ในโครงสร้างข้อมูลแบบไดนามิกบางอย่างเพื่อใช้ในภายหลัง เห็นได้ชัดว่าดูเหมือนว่าคุณจะใช้วิธีแก้ปัญหาบางอย่างที่จะเรียกใช้ฟังก์ชันการจัดสรร * บางอย่าง (hashmap, รายการที่ลิงก์, สิ่งที่คล้ายกัน) สำหรับโปรแกรมประเภทนี้มันไม่สมเหตุสมผลเลยที่จะโทรฟรีmallocเพราะตัวแปรเหล่านี้จะต้องปรากฏตลอดเวลาในระหว่างการดำเนินการของโปรแกรมและไม่มีวิธีที่ดี (ที่ฉันเห็น) ในการดำเนินการนี้ด้วยการจัดสรรพื้นที่แบบคงที่ เป็นการออกแบบที่ไม่ดีที่จะมีหน่วยความจำจำนวนมากที่จัดสรรไว้ แต่ปล่อยให้เป็นอิสระซึ่งเป็นส่วนหนึ่งของกระบวนการที่สิ้นสุด ถ้าเป็นเช่นนั้นทางเลือกคืออะไร?
538 c  malloc  free 

8
พฤติกรรมที่ไม่ได้กำหนดไม่ระบุและไม่ได้กำหนดและการนำไปปฏิบัติ
พฤติกรรมที่ไม่ได้กำหนดใน C และ C ++ คืออะไร สิ่งที่เกี่ยวกับพฤติกรรมที่ไม่ระบุและพฤติกรรมที่กำหนดไว้ในการนำไปใช้ ความแตกต่างระหว่างพวกเขาคืออะไร?


2
เหตุใด ENOENT จึงหมายถึง“ ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว”
อะไรENTในค่าเฉลี่ยENOENT? ไม่ควรเกิดข้อผิดพลาด: ไม่พบไฟล์หรือโฟลเดอร์ เพิ่งจะตั้งชื่อตามENOFILE? มีเรื่องราวหรือเหตุผลหรือไม่?
507 c  linux  unix 

13
char s [] และ char * s แตกต่างกันอย่างไร?
ใน C หนึ่งสามารถใช้ตัวอักษรสตริงในการประกาศเช่นนี้: char s[] = "hello"; หรือเช่นนี้ char *s = "hello"; ดังนั้นความแตกต่างคืออะไร? ฉันต้องการที่จะรู้ว่าสิ่งที่เกิดขึ้นจริงในแง่ของระยะเวลาการจัดเก็บทั้งในเวลารวบรวมและเวลาทำงาน
506 c  string  char  constants 

12
ฟังก์ชั่น "คงที่" ใน C คืออะไร?
คำถามเกี่ยวกับธรรมดา ค ฟังก์ชั่นไม่ C ++ static วิธีการดังที่อธิบายไว้ในความคิดเห็น ฉันเข้าใจว่าstaticตัวแปรคืออะไร แต่staticฟังก์ชั่นคืออะไร? และทำไมถ้าฉันประกาศฟังก์ชั่นสมมุติvoid print_matrixว่าa.c(โดยไม่มีa.h) และรวม"a.c"- ฉันจะได้รับ"print_matrix@@....) already defined in a.obj"แต่ถ้าฉันประกาศเมื่อstatic void print_matrixมันรวบรวมมัน? อัปเดตเพียงเพื่อล้างสิ่งต่าง ๆ - ฉันรู้ว่าการรวมกัน.cนั้นไม่ดีเท่าที่คุณหลายคนชี้ให้เห็น ฉันเพียงแค่ทำมันไปยังพื้นที่ที่ชัดเจนชั่วคราวmain.cจนกว่าฉันจะมีความคิดที่ดีของวิธีการทุกกลุ่มฟังก์ชั่นที่เป็นที่เหมาะสม.hและ.cไฟล์ เป็นการแก้ปัญหาชั่วคราวที่รวดเร็ว

9
เหตุใดขนาดของ (x ++) จึงไม่เพิ่มขึ้น x
นี่คือโค้ดที่คอมไพล์ใน windows dev c ++: #include <stdio.h> int main() { int x = 5; printf("%d and ", sizeof(x++)); // note 1 printf("%d\n", x); // note 2 return 0; } ผมคาดว่าxจะเป็น 6 หลังจากรัน1 ข้อความ อย่างไรก็ตามผลลัพธ์คือ: 4 and 5 ทุกคนสามารถอธิบายได้ว่าทำไมxไม่ได้เพิ่มขึ้นหลังจากที่ทราบ 1 ?
505 c  sizeof 

30
หนึ่งจะเขียนรหัสเชิงวัตถุใน C อย่างไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา การเขียนโค้ดเชิงวัตถุใน C มีวิธีใดบ้าง โดยเฉพาะในเรื่องของ polymorphism ดูเพิ่มเติมนี้กองมากเกินคำถามวัตถุปฐมนิเทศใน C
500 c  oop  object 


8
int กับ size_t ที่ไม่ได้ลงชื่อ
ฉันสังเกตว่ารหัส C และ C ++ ที่ทันสมัยดูเหมือนว่าจะใช้size_tแทนint/ unsigned intสวยมากทุกที่ - จากพารามิเตอร์สำหรับฟังก์ชันสตริง C ถึง STL ฉันอยากรู้ว่าเหตุผลนี้และประโยชน์ที่จะได้รับ
492 c++  c  size-t 


11
ฉันจะแสดงรายการสัญลักษณ์ในไฟล์. so ได้อย่างไร
ฉันจะแสดงรายการสัญลักษณ์ที่ส่งออกจากไฟล์. so ได้อย่างไร ถ้าเป็นไปได้ฉันก็อยากจะรู้แหล่งที่มาของมัน (เช่นถ้าพวกมันถูกดึงเข้ามาจากห้องสมุดคง) ฉันใช้ gcc 4.0.2 ถ้านั่นสร้างความแตกต่าง
486 c++  c  gcc  symbols  name-mangling 

5
ตัวระบุรูปแบบที่ถูกต้องสำหรับ double ใน printf
ตัวระบุรูปแบบที่ถูกต้องสำหรับdoubleใน printf คืออะไร มัน%fหรือมันคือ%lf? ฉันเชื่อว่ามัน%fแต่ฉันไม่แน่ใจ ตัวอย่างโค้ด #include <stdio.h> int main() { double d = 1.4; printf("%lf", d); // Is this wrong? }


30
การประกอบเร็วกว่า C เมื่อใด
หนึ่งในเหตุผลที่ระบุไว้สำหรับการทราบแอสเซมเบลอร์คือในบางครั้งมันสามารถใช้ในการเขียนรหัสที่จะมีประสิทธิภาพมากกว่าการเขียนโค้ดนั้นในภาษาระดับสูงโดยเฉพาะอย่างยิ่ง C แต่ผมเคยได้ยินยังระบุไว้หลายครั้งแล้วว่าถึงแม้ว่ามันจะไม่ได้เป็นเท็จอย่างสิ้นเชิงกรณีที่ผู้ประกอบสามารถจริงจะนำมาใช้เพื่อสร้างรหัส performant มากขึ้นมีทั้งหายากมากและต้องใช้ความรู้จากผู้เชี่ยวชาญและประสบการณ์เกี่ยวกับการชุมนุม คำถามนี้ไม่ได้เกี่ยวกับข้อเท็จจริงที่ว่าคำสั่งแอสเซมเบลอร์จะเป็นแบบเฉพาะเครื่องจักรและไม่ใช่แบบพกพาหรือด้านอื่น ๆ ของแอสเซมเบลอร์ มีเหตุผลที่ดีมากมายในการรู้จักการประกอบนอกเหนือจากนี้แน่นอน แต่นี่เป็นคำถามที่เฉพาะเจาะจงเพื่อชักชวนตัวอย่างและข้อมูลไม่ใช่การสนทนาที่เพิ่มขึ้นของผู้ประกอบการกับภาษาระดับสูง ทุกคนสามารถให้ตัวอย่างเฉพาะของกรณีที่การชุมนุมจะเร็วกว่ารหัส C ที่เขียนดีโดยใช้คอมไพเลอร์ที่ทันสมัยและคุณสามารถสนับสนุนการเรียกร้องที่มีหลักฐานการทำโปรไฟล์? ฉันค่อนข้างมั่นใจว่ากรณีเหล่านี้มีอยู่จริง แต่ฉันต้องการทราบอย่างแน่ชัดว่าคดีเหล่านี้เป็นความลับอย่างไรเพราะมันดูเหมือนจะเป็นประเด็นของความขัดแย้ง
475 c  performance  assembly 

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