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

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

17
ทำไมต้องใช้พอยน์เตอร์? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันรู้ว่านี่เป็นคำถามพื้นฐานจริง ๆ แต่ฉันเพิ่งเริ่มต้นด้วยการเขียนโปรแกรม C ++ ขั้นพื้นฐานบางอย่างหลังจากเขียนโค้ดโปรเจ็กต์ด้วยภาษาระดับสูง โดยทั่วไปฉันมีสามคำถาม: เหตุใดจึงใช้พอยน์เตอร์แทนตัวแปรปกติ ฉันควรใช้พอยน์เตอร์เมื่อใดและที่ไหน คุณใช้พอยน์เตอร์กับอาร์เรย์ได้อย่างไร
356 c++  c  pointers 

5
__attribute __ ((constructor)) ทำงานอย่างไร
ดูเหมือนจะค่อนข้างชัดเจนว่าควรตั้งค่าสิ่งต่าง ๆ มันจะทำงานเมื่อใด เหตุใดจึงมีสองวงเล็บ คือ__attribute__ฟังก์ชั่น? แมโครหรือไม่? ไวยากรณ์? ใช้งานได้ใน C หรือไม่ c ++? ฟังก์ชั่นนี้ใช้งานได้กับต้องเป็นแบบคงที่หรือไม่? __attribute__((destructor))ทำงานเมื่อไหร่ ตัวอย่างใน Objective-C : __attribute__((constructor)) static void initialize_navigationBarImages() { navigationBarImages = [[NSMutableDictionary alloc] init]; } __attribute__((destructor)) static void destroy_navigationBarImages() { [navigationBarImages release]; }
348 c++  objective-c  c  gcc 

17
ฉันจะต่อสตริง const / literal ใน C ได้อย่างไร
ฉันทำงานใน C และฉันต้องต่อสิ่งเล็ก ๆ น้อย ๆ ตอนนี้ฉันมีสิ่งนี้: message = strcat("TEXT ", var); message2 = strcat(strcat("TEXT ", foo), strcat(" TEXT ", bar)); ตอนนี้ถ้าคุณมีประสบการณ์ใน C ฉันมั่นใจว่าคุณรู้ว่านี่เป็นข้อผิดพลาดในการแบ่งส่วนเมื่อคุณพยายามเรียกใช้ ดังนั้นฉันจะแก้ไขได้อย่างไร
348 c  string  concatenation 

10
การพิมพ์ชั้นนำ 0 ใน C?
ฉันกำลังพยายามหาวิธีที่ดีในการพิมพ์นำ 0 ของเช่น 01001 สำหรับรหัสไปรษณีย์ ในขณะที่หมายเลขจะถูกเก็บไว้ที่ 1,001 วิธีที่ดีที่จะทำคืออะไร? ฉันคิดว่าจะใช้ทั้งสองคำสั่ง case / ถ้าจะหาว่าตัวเลขเป็นตัวเลขแล้วแปลงเป็นอาร์เรย์ char ที่มี 0 พิเศษสำหรับการพิมพ์ แต่ฉันไม่สามารถช่วย แต่คิดว่าอาจมีวิธีการทำเช่นนี้กับ ไวยากรณ์รูปแบบ printf ที่ทำให้ฉันรำคาญ
345 c  printf 

8
วิธีการพิมพ์“ ไม่ได้ลงนามนาน” ใน C?
ฉันไม่สามารถเข้าใจวิธีการพิมพ์ unsigned longประเภทข้อมูลใน C สมมติว่าunsigned_fooเป็นunsigned longแล้วฉันลอง: printf("%lu\n", unsigned_foo) printf("%du\n", unsigned_foo) printf("%ud\n", unsigned_foo) printf("%ll\n", unsigned_foo) printf("%ld\n", unsigned_foo) printf("%dl\n", unsigned_foo) และพวกเขาทั้งหมดพิมพ์-123123123หมายเลขบางชนิดแทนที่unsigned longฉันมี

9
เคล็ดลับ LD_PRELOAD คืออะไร
ฉันเจอการอ้างอิงถึงมันเมื่อเร็ว ๆ นี้ในproggitและ (ณ ตอนนี้) มันไม่ได้อธิบาย ฉันสงสัยว่ามันอาจเป็นไปได้ แต่ฉันไม่รู้แน่นอน


10
ผ่านจำนวนตัวแปรของการขัดแย้งรอบ ๆ
สมมติว่าฉันมีฟังก์ชั่น C ซึ่งรับอาร์กิวเมนต์จำนวนตัวแปร: ฉันจะเรียกฟังก์ชั่นอื่นซึ่งคาดว่าจะมีจำนวนตัวแปรที่ขัดแย้งกันจากภายในได้อย่างไรโดยผ่านอาร์กิวเมนต์ทั้งหมดที่มีในฟังก์ชันแรก ตัวอย่าง: void format_string(char *fmt, ...); void debug_print(int dbg_lvl, char *fmt, ...) { format_string(fmt, /* how do I pass all the arguments from '...'? */); fprintf(stdout, fmt); }

22
ตัวแปรโลคัลแบบไม่กำหนดค่าเริ่มต้นเป็นตัวสร้างตัวเลขสุ่มที่เร็วที่สุดหรือไม่
ฉันรู้ว่าตัวแปรท้องถิ่นที่ไม่ได้กำหนดค่าเริ่มต้นคือพฤติกรรมที่ไม่ได้กำหนด ( UB ) และค่าอาจมีการแทนแทร็บซึ่งอาจส่งผลต่อการดำเนินการต่อไป แต่บางครั้งฉันต้องการใช้ตัวเลขสุ่มเท่านั้นสำหรับการแสดงด้วยภาพ โปรแกรมตัวอย่างเช่นตั้งค่าบางสิ่งที่มีสีแบบสุ่มในเอฟเฟ็กต์ภาพเช่น: void updateEffect(){ for(int i=0;i<1000;i++){ int r; int g; int b; star[i].setColor(r%255,g%255,b%255); bool isVisible; star[i].setVisible(isVisible); } } มันเร็วกว่าไหม void updateEffect(){ for(int i=0;i<1000;i++){ star[i].setColor(rand()%255,rand()%255,rand()%255); star[i].setVisible(rand()%2==0?true:false); } } และยังเร็วกว่าตัวสร้างตัวเลขสุ่มอื่น ๆ

30
พิมพ์ 1 ถึง 1,000 โดยไม่มีลูปหรือเงื่อนไข
ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ภารกิจ : พิมพ์ตัวเลขตั้งแต่ 1 ถึง 1,000 โดยไม่ต้องใช้คำสั่งวนซ้ำหรือเงื่อนไขใด ๆ อย่าเพิ่งเขียนprintf()หรือcoutสั่ง 1,000 ครั้ง คุณจะทำเช่นนั้นโดยใช้ C หรือ C ++ ได้อย่างไร
323 c++  c  printf 

23
วัตถุประสงค์ของการใช้วงเล็บปีกกา (เช่น {}) สำหรับบรรทัดเดียวคือถ้าหรือวนรอบคืออะไร?
ฉันกำลังอ่านบันทึกการบรรยายของอาจารย์ C ++ ของฉันและเขาเขียนสิ่งต่อไปนี้: ใช้การเยื้อง // ตกลง ไม่ต้องพึ่งพาลำดับความสำคัญของโอเปอเรเตอร์ - ใช้เครื่องหมายวงเล็บ // OK ใช้บล็อก {} ทุกครั้ง - แม้สำหรับบรรทัดเดียว // ไม่เป็นไรทำไม ??? วัตถุ Const ที่ด้านซ้ายของการเปรียบเทียบ // ตกลง ใช้เครื่องหมายที่ไม่ได้ลงชื่อสำหรับตัวแปรที่> = 0 // เคล็ดลับดี ตั้งค่าตัวชี้เป็น NULL หลังจากลบ - การป้องกันการลบสองครั้ง // ไม่เลว เทคนิคที่สามไม่ชัดเจนสำหรับฉัน: ฉันจะได้อะไรจากการวางหนึ่งบรรทัดใน { ... } ? ตัวอย่างเช่นใช้รหัสแปลก ๆ นี้: int j = 0; …

9
จะแยกสตริงตามตัวอักษรข้ามหลายบรรทัดใน C / Objective-C ได้อย่างไร?
ฉันมีแบบสอบถาม SQL ยาวสวย: const char *sql_query = "SELECT statuses.word_id FROM lang1_words, statuses WHERE statuses.word_id = lang1_words.word_id ORDER BY lang1_words.word ASC"; ฉันจะแบ่งเป็นหลายบรรทัดเพื่อให้อ่านง่ายขึ้นได้อย่างไร ถ้าฉันทำต่อไปนี้: const char *sql_query = "SELECT word_id FROM table1, table2 WHERE table2.word_id = table1.word_id ORDER BY table1.word ASC"; ฉันได้รับข้อผิดพลาด มีวิธีเขียนแบบสอบถามหลายบรรทัดหรือไม่?
321 c  objective-c 

4
การรวม C ++ และ C - #ifdef __cplusplus ทำงานอย่างไร
ฉันกำลังทำงานในโครงการที่มีรหัสCดั้งเดิมมากมาย เราได้เริ่มเขียนใน C ++ โดยมีเจตนาที่จะแปลงรหัสดั้งเดิมในที่สุดเช่นกัน ฉันสับสนเล็กน้อยเกี่ยวกับการโต้ตอบของCและ C ++ ฉันเข้าใจว่าการห่อรหัสCด้วยextern "C"คอมไพเลอร์ C ++ จะไม่ทำให้ชื่อของรหัสCเสื่อมลงแต่ฉันไม่แน่ใจว่าจะใช้สิ่งนี้ได้อย่างไร ดังนั้นที่ด้านบนของไฟล์ส่วนหัวCแต่ละไฟล์ (หลังจากที่มียามรวม) เรามี #ifdef __cplusplus extern "C" { #endif และที่ด้านล่างเราเขียน #ifdef __cplusplus } #endif ในระหว่างสองเรามีทั้งหมดของเรารวมถึง typedefs และฟังก์ชั่นต้นแบบ ฉันมีคำถามสองสามข้อเพื่อดูว่าฉันเข้าใจสิ่งนี้ถูกต้องหรือไม่: ถ้าฉันมีไฟล์ C ++ A.hh ซึ่งรวมถึงไฟล์ส่วนหัวC Bh รวมถึงไฟล์ส่วนหัวCอีกCh วิธีนี้ทำงานอย่างไร ฉันคิดว่าเมื่อคอมไพเลอร์เข้าสู่ Bh __cplusplusจะถูกกำหนดดังนั้นมันจะล้อมโค้ดด้วยextern "C" (และ__cplusplusจะไม่ถูกกำหนดภายในบล็อกนี้) ดังนั้นเมื่อเข้าสู่ Ch แล้ว __cplusplusจะไม่ถูกกำหนดและรหัสจะไม่ถูกรวมเข้าด้วย extern "C"กัน …

4
ฟังก์ชัน C นี้ควรส่งคืนค่าเท็จเสมอ แต่ไม่เป็นเช่นนั้น
ฉันพบคำถามที่น่าสนใจในฟอรัมมานานแล้วและต้องการทราบคำตอบ พิจารณาฟังก์ชัน C ต่อไปนี้: f1.c #include <stdbool.h> bool f1() { int var1 = 1000; int var2 = 2000; int var3 = var1 + var2; return (var3 == 0) ? true : false; } นี้ควรกลับมาตั้งแต่false ฟังก์ชั่นมีลักษณะเช่นนี้var3 == 3000main main.c #include <stdio.h> #include <stdbool.h> int main() { printf( f1() == true ? …
317 c  gcc 

2
0.0039215689 คงที่คืออะไร
ฉันยังคงเห็นนี้คงปรากฏขึ้นในไฟล์ส่วนหัวกราฟิกต่างๆ 0.0039215689 ดูเหมือนว่าจะมีบางอย่างที่เกี่ยวกับสีอาจจะ? นี่คือการโจมตีครั้งแรกใน Google : void RDP_G_SETFOGCOLOR(void) { Gfx.FogColor.R = _SHIFTR(w1, 24, 8) * 0.0039215689f; Gfx.FogColor.G = _SHIFTR(w1, 16, 8) * 0.0039215689f; Gfx.FogColor.B = _SHIFTR(w1, 8, 8) * 0.0039215689f; Gfx.FogColor.A = _SHIFTR(w1, 0, 8) * 0.0039215689f; } void RDP_G_SETBLENDCOLOR(void) { Gfx.BlendColor.R = _SHIFTR(w1, 24, 8) * 0.0039215689f; Gfx.BlendColor.G = …

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