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

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

9
ฟังก์ชันซ้อนใน C
เราสามารถมีฟังก์ชันซ้อนใน C ได้หรือไม่? การใช้ฟังก์ชันซ้อนกันคืออะไร? หากมีอยู่ใน C การนำไปใช้งานแตกต่างจากคอมไพเลอร์ถึงคอมไพเลอร์หรือไม่?
97 c  function  nested 

2
## (แฮชคู่) ทำอะไรในคำสั่งพรีโปรเซสเซอร์
#define DEFINE_STAT(Stat) \ struct FThreadSafeStaticStat<FStat_##Stat> StatPtr_##Stat; บรรทัดด้านบนมาจาก Unreal 4 และฉันรู้ว่าฉันสามารถถามมันได้ในฟอรัมที่ไม่จริง แต่ฉันคิดว่านี่เป็นคำถาม C ++ ทั่วไปที่รับประกันว่าถูกถามที่นี่ ฉันเข้าใจว่าบรรทัดแรกกำหนดมาโคร แต่ฉันไม่ชำนาญในเชนานิแกนของตัวประมวลผลล่วงหน้าใน C ++ ดังนั้นฉันจึงหลงทางตรงนั้น ตรรกะบอกฉันว่าแบ็กสแลชหมายความว่าการประกาศจะดำเนินต่อไปในบรรทัดถัดไป FThreadSafeStaticStat ดูเหมือนเทมเพลต แต่มี # เกิดขึ้นที่นั่นและไวยากรณ์ที่ฉันไม่เคยเห็นมาก่อนใน C ++ มีใครบอกฉันได้ไหมว่านี่หมายถึงอะไร ฉันเข้าใจว่าคุณอาจไม่มีสิทธิ์เข้าถึง Unreal 4 แต่เป็นเพียงไวยากรณ์ที่ฉันไม่เข้าใจ

9
main () method ทำงานอย่างไรใน C?
ฉันรู้ว่ามีสองลายเซ็นที่แตกต่างกันในการเขียนวิธีการหลัก - int main() { //Code } หรือสำหรับการจัดการอาร์กิวเมนต์บรรทัดคำสั่งเราเขียนเป็น - int main(int argc, char * argv[]) { //code } ในC++ฉันรู้ว่าเราสามารถโอเวอร์โหลดเมธอดได้ แต่Cคอมไพเลอร์จัดการกับลายเซ็นของmainฟังก์ชันทั้งสองนี้อย่างไร
96 c++  c 

1
จุดประสงค์ของ [1] นี้ในตอนท้ายของการประกาศโครงสร้างคืออะไร?
ฉันกำลังสอดแนมไฟล์ส่วนหัวของไมโครคอนโทรลเลอร์ MSP430 ของฉันและฉันพบสิ่งนี้ใน<setjmp.h>: /* r3 does not have to be saved */ typedef struct { uint32_t __j_pc; /* return address */ uint32_t __j_sp; /* r1 stack pointer */ uint32_t __j_sr; /* r2 status register */ uint32_t __j_r4; uint32_t __j_r5; uint32_t __j_r6; uint32_t __j_r7; uint32_t __j_r8; uint32_t __j_r9; uint32_t __j_r10; uint32_t …

6
เหตุใดการกำหนดค่าให้กับฟิลด์บิตจึงไม่ให้ค่าเดิมกลับคืนมา
ฉันเห็นรหัสด้านล่างในโพสต์ Quora นี้ : #include <stdio.h> struct mystruct { int enabled:1; }; int main() { struct mystruct s; s.enabled = 1; if(s.enabled == 1) printf("Is enabled\n"); // --> we think this to be printed else printf("Is disabled !!\n"); } ในทั้งสอง C & C ++ ผลลัพธ์ของโค้ดที่เป็นที่ไม่คาดคิด , ถูกปิดใช้งาน !! แม้ว่าจะมีการให้คำอธิบายที่เกี่ยวข้องกับ "บิตเครื่องหมาย" …

8
อาร์กิวเมนต์หลายรายการในฟังก์ชันที่เรียกโดย pthread_create ()?
ฉันต้องการส่งผ่านอาร์กิวเมนต์หลายรายการไปยังฟังก์ชันที่ฉันต้องการเรียกใช้ในเธรดแยกต่างหาก ฉันได้อ่านมาว่าวิธีการทั่วไปในการทำเช่นนี้คือการกำหนดโครงสร้างส่งผ่านฟังก์ชันตัวชี้ไปยังสิ่งนั้นและหักล้างค่าสำหรับอาร์กิวเมนต์ อย่างไรก็ตามฉันไม่สามารถใช้งานได้: #include <stdio.h> #include <pthread.h> struct arg_struct { int arg1; int arg2; }; void *print_the_arguments(void *arguments) { struct arg_struct *args = (struct arg_struct *)args; printf("%d\n", args -> arg1); printf("%d\n", args -> arg2); pthread_exit(NULL); return NULL; } int main() { pthread_t some_thread; struct arg_struct args; args.arg1 = 5; args.arg2 …
96 c  pthreads 

21
ฟังก์ชันใดในการแทนที่สตริงย่อยจากสตริงใน C
ด้วยchar *สตริง( ) ฉันต้องการค้นหาเหตุการณ์ที่เกิดขึ้นทั้งหมดของสตริงย่อยและแทนที่ด้วยสตริงอื่น ฉันไม่เห็นฟังก์ชั่นง่ายๆที่ทำได้ใน<string.h>.
96 c  string 

7
อะไรคือเหตุผลสำหรับ fread / fwrite ที่มีขนาดและนับเป็นอาร์กิวเมนต์?
เราได้พูดคุยกันในที่ทำงานเกี่ยวกับสาเหตุที่ fread และ fwrite ใช้ขนาดต่อสมาชิกและนับและส่งคืนจำนวนสมาชิกที่อ่าน / เขียนแทนที่จะใช้แค่บัฟเฟอร์และขนาด การใช้งานเพียงอย่างเดียวที่เราสามารถทำได้คือถ้าคุณต้องการอ่าน / เขียนอาร์เรย์ของโครงสร้างที่ไม่สามารถหารด้วยการจัดตำแหน่งแพลตฟอร์มได้อย่างเท่าเทียมกันและด้วยเหตุนี้จึงได้รับการบุนวม แต่ไม่สามารถใช้ร่วมกันได้เพื่อรับประกันตัวเลือกนี้ ในการออกแบบ จากFREAD (3) : ฟังก์ชั่น fread () อ่านองค์ประกอบ nmemb ของข้อมูลแต่ละขนาดไบต์ยาวจากสตรีมที่ชี้ไปที่สตรีมจัดเก็บไว้ในตำแหน่งที่กำหนดโดย ptr ฟังก์ชัน fwrite () เขียนองค์ประกอบ nmemb ของข้อมูลแต่ละขนาดไบต์ยาวไปยังสตรีมที่สตรีมชี้ไปโดยรับข้อมูลจากตำแหน่งที่กำหนดโดย ptr fread () และ fwrite () ส่งคืนจำนวนรายการที่อ่านหรือเขียนสำเร็จ (กล่าวคือไม่ใช่จำนวนอักขระ) หากข้อผิดพลาดเกิดขึ้นหรือถึงจุดสิ้นสุดของไฟล์ค่าที่ส่งคืนจะเป็นการนับรายการสั้น ๆ (หรือศูนย์)
96 c  libc 

17
พอยน์เตอร์ของฟังก์ชันคืออะไร?
ฉันมีปัญหาในการดูยูทิลิตี้ของตัวชี้ฟังก์ชัน ฉันเดาว่ามันอาจมีประโยชน์ในบางกรณี (มีอยู่จริง) แต่ฉันไม่สามารถนึกถึงกรณีที่ใช้ตัวชี้ฟังก์ชันได้ดีกว่าหรือหลีกเลี่ยงไม่ได้ คุณช่วยยกตัวอย่างการใช้ฟังก์ชันพอยน์เตอร์ (ใน C หรือ C ++) ให้ดีได้ไหม
96 c++  c  function  pointers  c++-faq 

3
“ memory stomp” คืออะไร?
ฉันเพิ่งเจอบล็อกโพสต์นี้ซึ่งกล่าวถึง“ ความทรงจำที่ย่ำแย่” โปรแกรม C ++ ที่สามารถเหยียบหน่วยความจำได้อย่างง่ายดาย (สิ่งที่คุณอาจไม่เคยได้ยินมาก่อนหากคุณเกิดในโลกแห่งรหัสที่มีการจัดการ) และอันที่จริงฉันไม่เคยได้ยินมาก่อน! แล้วนี่คืออะไรความทรงจำเหยียบความทรงจำ เกิดขึ้นเมื่อใด

16
แนวทางปฏิบัติที่ดีที่สุดสำหรับการดำเนินการกะวงกลม (หมุน) ใน C ++
ตัวดำเนินการกะซ้ายและขวา (<< และ >>) มีอยู่แล้วใน C ++ อย่างไรก็ตามฉันไม่พบว่าฉันสามารถดำเนินการกะแบบวงกลมหรือหมุนได้อย่างไร สามารถดำเนินการเช่น "หมุนซ้าย" และ "หมุนขวา" ได้อย่างไร? หมุนขวาสองครั้งที่นี่ Initial --> 1000 0011 0100 0010 ควรส่งผลให้: Final --> 1010 0000 1101 0000 ตัวอย่างจะเป็นประโยชน์ (หมายเหตุบรรณาธิการ: วิธีทั่วไปหลายอย่างในการแสดงการหมุนใน C ต้องทนทุกข์ทรมานจากพฤติกรรมที่ไม่ได้กำหนดหากจำนวนการหมุนเป็นศูนย์หรือรวบรวมมากกว่าคำสั่งเครื่องหมุนเพียงครั้งเดียวคำตอบของคำถามนี้ควรบันทึกแนวทางปฏิบัติที่ดีที่สุด)

5
วิธีเพิ่มที่อยู่ตัวชี้และค่าของตัวชี้
ให้เราถือว่า int *p; int a = 100; p = &a; โค้ดต่อไปนี้จะทำอะไรได้จริงและอย่างไร? p++; ++p; ++*p; ++(*p); ++*(p); *p++; (*p)++; *(p)++; *++p; *(++p); ฉันรู้ว่านี่เป็นเรื่องยุ่งในแง่ของการเข้ารหัส แต่ฉันอยากรู้ว่าจะเกิดอะไรขึ้นเมื่อเราเขียนโค้ดแบบนี้ หมายเหตุ: ให้คิดว่าที่อยู่ของa=5120300มันจะถูกเก็บไว้ในตัวชี้ที่มีอยู่คือp หลังจากการดำเนินการของแต่ละคำสั่ง3560200จะมีมูลค่าp & aเท่าใด
96 c  pointers 

13
ฉันจะใช้“ sizeof” ในมาโครตัวประมวลผลล่วงหน้าได้อย่างไร
มีวิธีใดบ้างในการใช้sizeofมาโครตัวประมวลผลล่วงหน้า ตัวอย่างเช่นมีสถานการณ์มากมายในช่วงหลายปีที่ฉันต้องการทำสิ่งต่างๆเช่น: #if sizeof(someThing) != PAGE_SIZE #error Data structure doesn't match page size #endif สิ่งที่แน่นอนที่ฉันตรวจสอบที่นี่ถูกสร้างขึ้นอย่างสมบูรณ์ - ประเด็นคือฉันมักจะชอบใส่การตรวจสอบเวลาคอมไพล์ (ขนาดหรือการจัดตำแหน่ง) ประเภทนี้เพื่อป้องกันคนที่แก้ไขโครงสร้างข้อมูลซึ่งอาจไม่ตรงแนวหรือใหม่ ขนาดของสิ่งที่จะทำลายพวกเขา ไม่จำเป็นต้องพูด - ดูเหมือนว่าฉันจะไม่สามารถใช้ a sizeofในลักษณะที่อธิบายไว้ข้างต้นได้
96 c  gcc 

8
รับความกว้างของขั้วใน C?
ฉันกำลังมองหาวิธีรับความกว้างเทอร์มินัลจากภายในโปรแกรม C ของฉัน สิ่งที่ฉันคิดต่อไปคือบางสิ่งตามแนวของ: #include <sys/ioctl.h> #include <stdio.h> int main (void) { struct ttysize ts; ioctl(0, TIOCGSIZE, &ts); printf ("lines %d\n", ts.ts_lines); printf ("columns %d\n", ts.ts_cols); } แต่ทุกครั้งที่ฉันพยายามที่จะได้รับ austin@:~$ gcc test.c -o test test.c: In function ‘main’: test.c:6: error: storage size of ‘ts’ isn’t known test.c:7: error: ‘TIOCGSIZE’ undeclared (first …
96 c  linux  terminal  width 

9
เหตุใด C จึงไม่อนุญาตให้เชื่อมสตริงเข้าด้วยกันเมื่อใช้ตัวดำเนินการตามเงื่อนไข
โค้ดต่อไปนี้คอมไพล์ได้โดยไม่มีปัญหา: int main() { printf("Hi" "Bye"); } อย่างไรก็ตามสิ่งนี้ไม่ได้รวบรวม: int main() { int test = 0; printf("Hi" (test ? "Bye" : "Goodbye")); } เหตุผลนั้นคืออะไร?

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