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

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

14
จะอ่านบรรทัดจากคอนโซลใน C ได้อย่างไร?
วิธีที่ง่ายที่สุดในการอ่านบรรทัดเต็มในโปรแกรมคอนโซล C คืออะไรข้อความที่ป้อนอาจมีความยาวผันแปรและเราไม่สามารถตั้งสมมติฐานเกี่ยวกับเนื้อหาได้
108 c  io  console  stdin 


3
จะป้องกันไม่ให้ gcc เพิ่มประสิทธิภาพข้อความบางส่วนใน C ได้อย่างไร?
ในการทำให้หน้าสกปรก (การเปิดบิตสกปรกในรายการตารางหน้า) ฉันแตะไบต์แรกของหน้าดังนี้: pageptr[0] = pageptr[0]; แต่ในทางปฏิบัติ gcc จะเพิกเฉยต่อคำสั่งโดยการกำจัดร้านค้าที่ตายแล้ว เพื่อป้องกันไม่ให้ gcc ปรับให้เหมาะสมฉันเขียนคำสั่งใหม่ดังนี้: volatile int tmp; tmp = pageptr[0]; pageptr[0] = tmp; ดูเหมือนว่าเคล็ดลับจะใช้งานได้ แต่ค่อนข้างน่าเกลียด ฉันต้องการทราบว่ามีคำสั่งหรือไวยากรณ์ใดที่มีผลเหมือนกันหรือไม่? และฉันไม่ต้องการใช้-O0ธงเพราะมันจะนำมาซึ่งโทษประสิทธิภาพที่ดีเช่นกัน
108 c  gcc 

6
ใช้ printf กับสตริงที่สิ้นสุดที่ไม่ใช่ค่าว่าง
สมมติว่าคุณมีสตริงที่ไม่nullถูกยกเลิกและคุณรู้ขนาดที่แน่นอนแล้วคุณจะพิมพ์สตริงนั้นด้วยprintfภาษา C ได้อย่างไร? ฉันจำวิธีการดังกล่าวได้ แต่ตอนนี้หาคำตอบไม่ได้ ...
108 c  string  format  printf 

2
GCC -g vs -g3 ค่าสถานะ GDB: ความแตกต่างคืออะไร?
เมื่อคอมไพล์ซอร์สโค้ด C ด้วย gcc หรือ Clang ฉันจะใช้-gแฟล็กเพื่อสร้างข้อมูลการดีบักสำหรับ gdb เสมอ gcc -g -o helloworld helloworld.c ฉันสังเกตเห็นว่ามีบางคนแนะนำ-g3แทน ความแตกต่างระหว่างแฟล็ก-gและ-g3แฟล็กคืออะไร? นอกจากนี้ยังมีความแตกต่างระหว่าง-gและ-ggdb?
108 c  debugging  gcc  gdb  clang 

3
ทำไมประเภทจำนวนเต็มแบบเร็วจึงเร็วกว่าประเภทจำนวนเต็มอื่น ๆ
ใน ISO / IEC 9899: 2018 (C18) แสดงไว้ภายใต้ 7.20.1.3: 7.20.1.3 ประเภทจำนวนเต็มความกว้างต่ำสุดที่เร็วที่สุด 1 แต่ละประเภทต่อไปนี้กำหนดประเภทจำนวนเต็มที่มักจะเร็วที่สุด268)เพื่อใช้งานกับประเภทจำนวนเต็มทั้งหมดที่มีความกว้างอย่างน้อยที่ระบุ 2 ชื่อ typedef int_fastN_tกำหนดประเภทจำนวนเต็มที่เร็วที่สุดที่ลงนามด้วยความกว้างอย่างน้อย N ชื่อ typedef uint_fastN_tกำหนดประเภทจำนวนเต็มที่ไม่ได้ลงชื่อที่เร็วที่สุดที่มีความกว้างอย่างน้อย N 3 ประเภทต่อไปนี้จำเป็นต้องใช้: int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t, uint_fast8_t, uint_fast16_t, uint_fast32_t,uint_fast64_t ประเภทอื่น ๆ ทั้งหมดของแบบฟอร์มนี้เป็นตัวเลือก 268)ประเภทที่กำหนดไม่รับประกันว่าจะเร็วที่สุดสำหรับทุกวัตถุประสงค์ หากการนำไปใช้ไม่มีเหตุผลที่ชัดเจนสำหรับการเลือกประเภทหนึ่งมากกว่าประเภทอื่นก็จะเลือกประเภทจำนวนเต็มบางอย่างที่ตอบสนองความต้องการของการลงนามและความกว้าง แต่ไม่ได้ระบุว่าทำไมประเภทจำนวนเต็ม "เร็ว" เหล่านี้จึงเร็วกว่า ทำไมจำนวนเต็มแบบเร็วเหล่านี้จึงเร็วกว่าประเภทจำนวนเต็มอื่น ๆ ผมติดแท็กคำถามกับ C ++ เพราะประเภทจำนวนเต็มอย่างรวดเร็วนอกจากนี้ยังมีใน C ++ 17 cstdintในไฟล์ส่วนหัวของ น่าเสียดายที่ใน …
107 c++  c  performance  types  int 

23
เรียนรู้ C ก่อนเรียนรู้ Objective-C [ปิด]
ตามที่กล่าวไว้ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ในฐานะนักพัฒนา Apple ที่ต้องการฉันต้องการรับความคิดเห็นของชุมชนว่าควรเรียนรู้ C ก่อนจะดีกว่าไหมก่อนที่จะย้ายเข้าสู่ Objective-C และท้ายที่สุด Cocoa Framework? ลำไส้ของฉันบอกว่าเรียนรู้ C ซึ่งจะทำให้ฉันมีพื้นฐานที่ดี
107 c  objective-c  cocoa 

4
ค่า enum เริ่มต้นใน C เหมือนกันสำหรับคอมไพเลอร์ทั้งหมดหรือไม่
เมื่อประกาศ enum ตามที่แสดงด้านล่างคอมไพเลอร์ C ทั้งหมดตั้งค่าเริ่มต้นเป็นx=0หรือy=1ไม่และz=2ทั้งบนระบบ Linux และ Windows typedef enum { x, y, z } someName;
107 c  enums 

19
C นิยามมาโครเพื่อกำหนด endian ใหญ่หรือเครื่อง endian น้อย?
มีคำจำกัดความมาโครหนึ่งบรรทัดเพื่อกำหนดความสิ้นสุดของเครื่องหรือไม่ ฉันใช้รหัสต่อไปนี้ แต่การแปลงเป็นมาโครจะยาวเกินไป unsigned char test_endian( void ) { int test_var = 1; unsigned char *test_endian = (unsigned char*)&test_var; return (test_endian[0] == 0); }

12
ลูป 'for' ภายในลูป 'for' สามารถใช้ชื่อตัวแปรตัวนับเดียวกันได้หรือไม่?
ฉันสามารถใช้ตัวแปรตัวนับเดียวกันสำหรับforลูปภายในforลูปได้หรือไม่ หรือตัวแปรจะมีผลต่อกัน? โค้ดต่อไปนี้ควรใช้ตัวแปรอื่นสำหรับลูปที่สองเช่นjหรือiไม่เป็นไร for(int i = 0; i < 10; i++) { for(int i = 0; i < 10; i++) { } }
107 c  loops  for-loop  nested 

13
หลีกเลี่ยงการลากศูนย์ใน printf ()
ฉันมักจะสะดุดกับตัวระบุรูปแบบสำหรับฟังก์ชันตระกูล printf () สิ่งที่ฉันต้องการคือสามารถพิมพ์คู่ (หรือลอย) โดยมีจำนวนหลักสูงสุดที่กำหนดหลังจุดทศนิยม ถ้าฉันใช้: printf("%1.3f", 359.01335); printf("%1.3f", 359.00999); ฉันเข้าใจ 359.013 359.010 แทนที่จะเป็นที่ต้องการ 359.013 359.01 ใครสามารถช่วยฉัน?
107 c  printf 

7
เครื่องมือในการรับกราฟการเรียกฟังก์ชันภาพของรหัส [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันมีพื้นที่ทำงานขนาดใหญ่ซึ่งมีซอร์สไฟล์รหัส C จำนวนมาก แม้ว่าฉันจะเห็นฟังก์ชันที่เรียกจากฟังก์ชันใน MS VS2005 โดยใช้เบราว์เซอร์ Object และใน MSVC 6.0 ก็แสดงเฉพาะฟังก์ชันที่เรียกจากฟังก์ชันเฉพาะในการแสดงผลที่ไม่ใช่กราฟิก นอกจากนี้ยังไม่แสดงฟังก์ชันที่เรียกว่าเริ่มต้นจากการพูดmain()และจากนั้นฟังก์ชันที่เรียกจากฟังก์ชันดังกล่าวและอื่น ๆ ที่ลึกลงไปในฟังก์ชันระดับใบ ฉันต้องการเครื่องมือที่จะให้กราฟการเรียกใช้ฟังก์ชันเป็นภาพที่มีฟังก์ชันcalleeและcallerเชื่อมต่อด้วยลูกศรหรืออะไรทำนองนั้นโดยเริ่มจากmain()ฟังก์ชันระดับสุดท้ายหรืออย่างน้อยก็แสดงกราฟการโทรของฟังก์ชันทั้งหมดในไฟล์ต้นฉบับ C ไฟล์เดียว จะดีมากถ้าฉันสามารถพิมพ์กราฟนี้ได้ มีเครื่องมือที่ดีในการทำเช่นนั้น (ไม่จำเป็นต้องเป็นเครื่องมือฟรี)?
107 c  function  call-graph 

2
การสร้างมาโคร C ด้วย ## และ __LINE__ (การเชื่อมต่อโทเค็นกับมาโครการกำหนดตำแหน่ง)
ฉันต้องการสร้างมาโคร C ที่สร้างฟังก์ชันด้วยชื่อตามหมายเลขบรรทัด ฉันคิดว่าฉันสามารถทำอะไรบางอย่างได้ (ฟังก์ชันจริงจะมีข้อความอยู่ในเครื่องหมายวงเล็บ): #define UNIQUE static void Unique_##__LINE__(void) {} ซึ่งฉันหวังว่าจะขยายไปสู่สิ่งที่ชอบ: static void Unique_23(void) {} ไม่ได้ผล ด้วยการต่อโทเค็นมาโครการกำหนดตำแหน่งจะได้รับการปฏิบัติตามตัวอักษรโดยขยายเป็น: static void Unique___LINE__(void) {} เป็นไปได้ไหมที่จะทำ? (ใช่มีเหตุผลจริงๆที่ฉันอยากทำไม่ว่ามันจะดูไร้ประโยชน์แค่ไหนก็ตาม)
107 c  macros  concatenation  token 

9
จะใส่ข้อความส่วนหัวหรือแหล่งที่มาได้ที่ไหน?
ฉันควรใส่รวมไว้ในไฟล์ส่วนหัวหรือไฟล์ต้นฉบับหรือไม่ ถ้าไฟล์ส่วนหัวมีคำสั่ง include ถ้าฉันรวมไฟล์ส่วนหัวนั้นไว้ในซอร์สไฟล์ซอร์สของฉันจะมีไฟล์ทั้งหมดที่อยู่ในส่วนหัวของฉันหรือไม่ หรือฉันควรรวมไว้ในไฟล์ต้นฉบับเท่านั้น?
107 c  header  include 

6
ตั้งค่าเบรกพอยต์ในโค้ด C หรือ C ++ โดยทางโปรแกรมสำหรับ gdb บน Linux
ฉันจะตั้งค่าเบรกพอยต์ในโค้ด C หรือ C ++ โดยทางโปรแกรมที่จะทำงานกับ gdb บน Linux ได้อย่างไร ได้แก่ : int main(int argc, char** argv) { /* set breakpoint here! */ int a = 3; a++; /* In gdb> print a; expect result to be 3 */ return 0; }
107 c++  c  linux  gdb 

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