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

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

3
ฉันสามารถใช้มาโครใดที่กำหนดไว้ล่วงหน้าเพื่อตรวจจับเสียงดัง
ฉันกำลังพยายามตรวจหาคอมไพเลอร์ที่ใช้ในการรวบรวมซอร์สโค้ดของฉัน ฉันสามารถค้นหามาโครที่กำหนดไว้ล่วงหน้าเพื่อตรวจสอบ MSVC หรือ GCC ได้อย่างง่ายดาย (ดูตัวอย่างhttp://predef.sourceforge.net/ ) แต่ฉันไม่พบมาโครใด ๆ เพื่อตรวจสอบเสียงดัง มีใครรู้บ้างว่าเสียงดังกล่าวกำหนดมาโครเช่น__CLANG__เพื่อที่จะรู้ว่ากำลังรวบรวมโค้ดของฉันอยู่หรือไม่?

7
จะส่งสตริงง่ายๆระหว่างสองโปรแกรมโดยใช้ไปป์ได้อย่างไร?
ฉันลองค้นหาในเน็ต แต่แทบจะไม่มีทรัพยากรเลย ตัวอย่างเล็กน้อยก็เพียงพอแล้ว แก้ไขฉันหมายถึงโปรแกรม C สองโปรแกรมที่สื่อสารกัน โปรแกรมหนึ่งควรส่ง "สวัสดี" และอีกโปรแกรมควรได้รับ อะไรแบบนั้น.
111 c  unix  pipe 

8
เหตุใด c = ++ (a + b) จึงให้ข้อผิดพลาดในการคอมไพล์
หลังจากการค้นคว้าผมอ่านว่าผู้ประกอบการที่เพิ่มขึ้นนั้นจะต้องถูกดำเนินการที่จะมีการปรับแก้ข้อมูลของวัตถุ: https://en.wikipedia.org/wiki/Increment_and_decrement_operators จากนี้ฉันเดาว่ามันทำให้เกิดข้อผิดพลาดในการคอมไพล์เนื่องจาก(a+b)เป็นจำนวนเต็มชั่วคราวดังนั้นจึงไม่สามารถแก้ไขได้ ความเข้าใจนี้ถูกต้องหรือไม่? นี่เป็นครั้งแรกที่ฉันพยายามค้นคว้าปัญหาดังนั้นหากมีสิ่งที่ควรค้นหาโปรดแนะนำ
111 c  increment 

20
ฉันจะสร้างระบบปฏิบัติการขนาดเล็กบนคอมพิวเตอร์เดสก์ท็อปรุ่นเก่าได้อย่างไร [ปิด]
ปิด . คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เน้นไปที่ปัญหาเดียวโดยแก้ไขโพสต์นี้เท่านั้น ปิดให้บริการใน4 ปีที่แล้ว ปรับปรุงคำถามนี้ สิ่งนี้อาจไร้ผลเนื่องจากฉันรู้ว่าการเขียนระบบปฏิบัติการนั้นซับซ้อนเหลือทน (โดยเฉพาะด้วยตัวเอง) ฉันไม่คาดหวังว่าจะสร้าง linux หรือ windows ตัวถัดไป ฉันรู้ว่ามันจะแย่และเป็นรถที่ใช้งานไม่ได้ แต่ก็ไม่เป็นไร ผมอยากจะเขียนทุกอย่างเองในสภา , Cและ (พอใช้) C ++ นี่เป็นโครงการในอนาคตเนื่องจากตอนนี้ฉันกำลังยุ่งอยู่กับเรื่องอื่น ๆ และไม่มีเวลาในทันที แต่ฉันคิดว่าจะถามตอนนี้ดังนั้นบางทีฉันอาจจะได้รับคำตอบมากมายสำหรับเรื่องนี้และมันก็ทำได้ สร้างและเป็นทรัพยากรที่มีประโยชน์สำหรับแนวทางนี้ (ทุกอย่างที่ฉันเคยเห็นเกี่ยวข้องกับการสร้างจาก minix โดยใช้ bootloader ที่มีอยู่สร้างมันในสิ่งที่โปรแกรมบูตเสมือน ฯลฯ ) ฉันต้องการตั้งค่าเดสก์ท็อปรุ่นเก่าด้วยจอภาพแป้นพิมพ์และเมาส์และเริ่มทำงานกับฮาร์ดไดรฟ์เปล่า ฉันต้องการเรียนรู้วิธีเขียนโปรแกรมโหลดบูตของตัวเอง (ฉันพบแหล่งข้อมูลมากมายเกี่ยวกับเรื่องนี้ แต่เพื่อความสมบูรณ์โปรดยังคงเพิ่มสิ่งที่ดี) ไดรเวอร์ USB ของฉันเอง (ถ้าจำเป็น) ไดรเวอร์ซีดี (หากจำเป็น ) ฯลฯ ทุกอย่างตั้งแต่ต้นจนจบ ฉันจะใส่รหัสลงในคอมพิวเตอร์ได้อย่างไร? …

8
มีไลบรารี C โอเพ่นซอร์สที่มีโครงสร้างข้อมูลทั่วไปหรือไม่ [ปิด]
ตามที่กล่าวไว้ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันกำลังมองหาห้องสมุด C ที่มีโครงสร้างข้อมูลที่นำมาใช้ใหม่ที่เหมือนกันเช่นเชื่อมโยงรายการตารางกัญชา ฯลฯ สิ่งที่ต้องการแหล่งกระจายกับนายอัลกอริทึมด้วย C (ปกอ่อน) โดยไคล์เลา
111 c  data-structures 

13
มีล่ามภาษา C หรือไม่? [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน2 ปีที่ผ่านมา ล็อค คำถามนี้และคำตอบถูกล็อกเนื่องจากคำถามไม่ตรงประเด็น แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ยังไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันสงสัยว่ามีบางอย่างเช่นล่ามสำหรับ C นั่นคือในเทอร์มินัล Linux ฉันสามารถพิมพ์ "python" แล้วโค้ดในล่ามนั้น (ฉันไม่แน่ใจว่าแปลคำถูกไหม) นี่เป็นประโยชน์มากสำหรับการทดสอบสิ่งต่างๆและฉันก็สงสัยว่ามีสิ่งที่คล้ายกันสำหรับ C หรือไม่แม้ว่าฉันจะสงสัยก็ตาม สิ่งเดียวที่ฉันคิดได้ก็คือเปลือก C ...

8
พฤติกรรมที่ไม่ได้กำหนดทางเทคนิคของ "แฮ็กโครงสร้าง" หรือไม่
สิ่งที่ฉันกำลังถามคือเคล็ดลับ "สมาชิกคนสุดท้ายของโครงสร้างมีความยาวผันแปร" ที่รู้จักกันดี มันจะเป็นดังนี้: struct T { int len; char s[1]; }; struct T *p = malloc(sizeof(struct T) + 100); p->len = 100; strcpy(p->s, "hello world"); เนื่องจากวิธีการจัดวางโครงสร้างในหน่วยความจำเราจึงสามารถซ้อนโครงสร้างบนบล็อกที่ใหญ่กว่าที่จำเป็นและปฏิบัติต่อสมาชิกตัวสุดท้ายราวกับว่ามันมีขนาดใหญ่กว่าที่1 charระบุ คำถามคือเทคนิคนี้เป็นพฤติกรรมที่ไม่ได้กำหนดทางเทคนิคหรือไม่? . ฉันคาดหวังว่าจะเป็นเช่นนั้น แต่ก็อยากรู้ว่ามาตรฐานพูดถึงเรื่องนี้อย่างไร PS: ฉันทราบถึงแนวทางของ C99 ในเรื่องนี้ฉันต้องการให้คำตอบยึดติดกับเวอร์ชันของเคล็ดลับตามที่ระบุไว้ด้านบนโดยเฉพาะ

11
จะลบสัญลักษณ์ C / C ++ ที่ไม่ได้ใช้ด้วย GCC และ ld ได้อย่างไร?
ฉันต้องการปรับขนาดของไฟล์ปฏิบัติการของฉันให้เหมาะสมอย่างรุนแรง ( ARMการพัฒนา) และฉันสังเกตเห็นว่าในรูปแบบการสร้างปัจจุบัน ( gcc+ ld) สัญลักษณ์ที่ไม่ได้ใช้ของฉันจะไม่ถูกตัดออก การใช้งานของarm-strip --strip-unneededสำหรับที่เกิด executables / ห้องสมุดไม่เปลี่ยนขนาดการส่งออกของปฏิบัติการที่(ผมมีความคิดว่าทำไมไม่มีบางทีมันก็ไม่ได้) จะเป็นอย่างไร(ถ้ามี)ในการแก้ไขไปป์ไลน์อาคารของฉันเพื่อให้สัญลักษณ์ที่ไม่ได้ใช้ถูกดึงออกจากไฟล์ผลลัพธ์ ฉันจะไม่นึกถึงสิ่งนี้ด้วยซ้ำ แต่สภาพแวดล้อมที่ฝังอยู่ในปัจจุบันของฉันไม่ได้ "ทรงพลัง" มากนักและประหยัดได้แม้จะ500Kไม่ได้2Mผลลัพธ์ในการเพิ่มประสิทธิภาพการโหลดที่ดีมาก อัปเดต: น่าเสียดายที่gccเวอร์ชันปัจจุบันที่ฉันใช้ไม่มี-dead-stripตัวเลือกและ-ffunction-sections... + --gc-sectionsสำหรับldไม่ได้ให้ความแตกต่างอย่างมีนัยสำคัญสำหรับผลลัพธ์ที่ได้ ฉันตกใจมากที่เรื่องนี้กลายเป็นปัญหาเพราะฉันแน่ใจว่าgcc + ldควรดึงสัญลักษณ์ที่ไม่ได้ใช้ออกโดยอัตโนมัติ (ทำไมพวกเขาถึงต้องเก็บไว้?)
111 c++  c  gcc  ld  strip 



3
วิธีที่แปลกประหลาดในการจัดสรรอาร์เรย์สองมิติ?
ในโครงการมีใครบางคนผลักดันบรรทัดนี้: double (*e)[n+1] = malloc((n+1) * sizeof(*e)); ซึ่งคาดว่าจะสร้างอาร์เรย์สองมิติของ (n + 1) * (n + 1) เป็นสองเท่า คาดคะเนผมพูดเพราะเพื่อให้ห่างไกลไม่มีใครฉันถามจะบอกฉันว่านี้ไม่ว่าหรือที่มันมาจากหรือทำไมมันควรจะทำงาน (ซึ่งถูกกล่าวหาว่ามันไม่ แต่ฉันยังไม่ได้ซื้อมัน) บางทีฉันอาจพลาดบางอย่างที่ชัดเจน แต่ฉันจะขอบคุณถ้ามีใครสามารถอธิบายข้างต้นให้ฉัน เพราะโดยส่วนตัวแล้วฉันจะรู้สึกดีขึ้นมากถ้าเราจะใช้สิ่งที่เราเข้าใจจริงๆ

3
เหตุใดไบนารีสองโปรแกรมที่มีเฉพาะความคิดเห็นจึงไม่เปลี่ยนไปตรงกับใน gcc
ฉันสร้างโปรแกรม C สองโปรแกรม โปรแกรม 1 int main() { } โปรแกรม 2 int main() { //Some Harmless comments } AFAIK เมื่อรวบรวมคอมไพเลอร์ (gcc) ควรละเว้นความคิดเห็นและพื้นที่สีขาวที่ซ้ำซ้อนและด้วยเหตุนี้ผลลัพธ์จึงต้องใกล้เคียงกัน แต่เมื่อฉันตรวจสอบ md5sums ของไบนารีเอาต์พุตมันไม่ตรงกัน ฉันลองรวบรวมด้วยการเพิ่มประสิทธิภาพ-O3แล้ว-Ofastแต่ก็ยังไม่ตรงกัน เกิดอะไรขึ้นที่นี่? แก้ไข: คำสั่งที่แน่นอนและมี md5sums คือ (t1.c คือโปรแกรม 1 และ t2.c คือโปรแกรม 2) gcc ./t1.c -o aaa gcc ./t2.c -o bbb 98c1a86e593fd0181383662e68bac22f aaa c10293cbe6031b13dc6244d01b4d2793 bbb …

30
ใน C / C ++ วิธีที่ง่ายที่สุดในการย้อนกลับลำดับของบิตเป็นไบต์คืออะไร?
แม้ว่าจะมีหลายวิธีในการย้อนกลับลำดับบิตในแต่ละไบต์ แต่ฉันก็อยากรู้ว่าอะไร "ง่ายที่สุด" สำหรับนักพัฒนาในการนำไปใช้ และโดยการย้อนกลับฉันหมายถึง: 1110 -> 0111 0010 -> 0100 คำถามนี้คล้ายกับ แต่ไม่ซ้ำกับคำถาม PHP นี้ คำถามนี้คล้ายกับ แต่ไม่ซ้ำกับคำถาม C นี้ คำถามนี้กำลังถามหาวิธีที่ง่ายที่สุดในการนำไปใช้โดยนักพัฒนา "อัลกอริทึมที่ดีที่สุด" เกี่ยวข้องกับหน่วยความจำและประสิทธิภาพของซีพียู
110 c++  c  bit-manipulation 

10
หมายเลขบรรทัด C / C ++
เพื่อวัตถุประสงค์ในการดีบักฉันสามารถรับหมายเลขบรรทัดในคอมไพเลอร์C / C ++ ได้หรือไม่ (วิธีมาตรฐานหรือวิธีเฉพาะสำหรับคอมไพเลอร์บางตัว) เช่น if(!Logical) printf("Not logical value at line number %d \n",LineNumber); // How to get LineNumber without writing it by my hand?(dynamic compilation)


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