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

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

12
เครื่องมือฟรีในการตรวจสอบซอร์สโค้ด C / C ++ กับชุดของมาตรฐานการเข้ารหัสหรือไม่ [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน6 ปีที่ผ่านมา ปรับปรุงคำถามนี้ มันดูง่ายที่จะหาเครื่องมือเช่นนี้สำหรับ Java ( Checkstyle , JCSC ) แต่ฉันไม่สามารถหาเครื่องมือสำหรับ C / C ++ ได้ ฉันไม่ได้มองหาเครื่องวิเคราะห์รหัสแบบคงที่ที่เป็นขุยฉันต้องการตรวจสอบกับมาตรฐานการเข้ารหัสเช่นการตั้งชื่อตัวแปรการใช้อักษรตัวพิมพ์ใหญ่การเว้นวรรคการระบุตำแหน่งการวางวงเล็บและอื่น ๆ
151 c++  c  coding-style 

4
ใน CMake ฉันจะทดสอบได้อย่างไรว่าคอมไพเลอร์เป็นเสียงดังกราว
เรามีชุดสคริปต์สร้างข้ามแพลตฟอร์ม CMakeและเราสนับสนุนการสร้างด้วยVisual C ++และ GCC เรากำลังลองเสียงดังกราวแต่ฉันไม่สามารถหาวิธีทดสอบได้ว่า Compiler นั้นเป็น Clang กับสคริปต์ CMake ของเราหรือไม่ สิ่งที่ฉันควรทดสอบเพื่อดูว่าคอมไพเลอร์เป็นเสียงดังกราวหรือไม่? ขณะนี้เรากำลังใช้MSVCและCMAKE_COMPILER_IS_GNU<LANG>ทดสอบ Visual C ++ และ GCC ตามลำดับ
151 c++  c  cmake  clang 

10
ทางเลือกมาตรฐานของเคล็ดลับ ## __ VA_ARGS__ ของ GCC?
มีปัญหาที่รู้จักกันดี กับ args ที่ว่างเปล่าสำหรับแมโคร variadic ใน C99 ตัวอย่าง: #define FOO(...) printf(__VA_ARGS__) #define BAR(fmt, ...) printf(fmt, __VA_ARGS__) FOO("this works fine"); BAR("this breaks!"); การใช้งานBAR()ด้านบนนั้นไม่ถูกต้องตามมาตรฐาน C99 เนื่องจากจะขยายเป็น: printf("this breaks!",); สังเกตเครื่องหมายจุลภาคต่อท้าย - ใช้งานไม่ได้ คอมไพเลอร์บางตัว (เช่น: Visual Studio 2010) จะกำจัดเครื่องหมายจุลภาคที่ต่อท้ายให้คุณอย่างเงียบ ๆ คอมไพเลอร์อื่น ๆ (เช่น: GCC) รองรับการวางไว้##ด้านหน้า__VA_ARGS__เช่น: #define BAR(fmt, ...) printf(fmt, ##__VA_ARGS__) แต่มีวิธีที่เป็นไปตามมาตรฐานในการรับพฤติกรรมนี้หรือไม่? บางทีใช้มาโครหลายตัว? ตอนนี้##รุ่นดูเหมือนจะได้รับการสนับสนุนอย่างดี (อย่างน้อยบนแพลตฟอร์มของฉัน) …

6
กำหนดบรรทัดของรหัสที่ทำให้เกิดความผิดพลาดในการแบ่งเซ็กเมนต์
หนึ่งจะกำหนดว่าข้อผิดพลาดอยู่ในรหัสที่ทำให้เกิดความผิดพลาดแบ่งส่วนได้อย่างไร คอมไพเลอร์ของฉันสามารถgccแสดงตำแหน่งของความผิดพลาดในโปรแกรมได้หรือไม่?

4
ฟังก์ชั่นการโทรไปจาก C
ฉันกำลังพยายามสร้างวัตถุแบบสแตติกที่เขียนใน Go to อินเตอร์เฟสด้วยโปรแกรม C (เช่นโมดูลเคอร์เนลหรือบางอย่าง) ฉันได้พบเอกสารเกี่ยวกับการเรียกฟังก์ชั่น C จาก Go แต่ฉันไม่พบวิธีการใช้งานอีกมาก สิ่งที่ฉันพบคือมันเป็นไปได้ แต่ซับซ้อน นี่คือสิ่งที่ฉันพบ: บล็อกโพสต์เกี่ยวกับการโทรกลับระหว่าง C และ Go เอกสาร Cgo โพสต์รายชื่อผู้รับจดหมาย ใครบ้างมีประสบการณ์กับสิ่งนี้หรือไม่? ในระยะสั้นฉันพยายามที่จะสร้างโมดูล PAM ที่เขียนทั้งหมดใน Go

4
เหตุใดหน่วยความจำนี้จึงไม่กินหน่วยความจำจริงๆ
ฉันต้องการสร้างโปรแกรมที่จะจำลองสถานการณ์ out-of-memory (OOM) บนเซิร์ฟเวอร์ Unix ฉันสร้างหน่วยความจำที่กินง่ายสุด ๆ นี้: #include <stdio.h> #include <stdlib.h> unsigned long long memory_to_eat = 1024 * 50000; size_t eaten_memory = 0; void *memory = NULL; int eat_kilobyte() { memory = realloc(memory, (eaten_memory * 1024) + 1024); if (memory == NULL) { // realloc failed here - we …


5
วิธีการทำเสียงดังกราวรวบรวมเพื่อ llvm IR
ฉันต้องการเสียงดังกราวด์เพื่อรวบรวมC/C++รหัสของฉันเพื่อLLVMbytecode มากกว่าปฏิบัติการไบนารี ฉันจะบรรลุสิ่งนั้นได้อย่างไร และถ้าฉันได้รับLLVMbytecode ฉันจะนำมันไปใช้เพื่อคอมไพล์มันต่อไปยังไบนารีที่ปฏิบัติการได้ โดยทั่วไปฉันต้องการเพิ่มรหัสของตัวเองลงใน LLVM bytecode ก่อนที่จะคอมไพล์ไปยังโปรแกรมปฏิบัติการไบนารี
150 c  llvm  clang 

12
ทำไม x [0]! = x [0] [0]! = x [0] [0] [0]
ฉันกำลังศึกษา C ++ เพียงเล็กน้อยและฉันกำลังต่อสู้กับพอยน์เตอร์ ฉันเข้าใจว่าฉันสามารถมีพอยน์เตอร์ได้ 3 ระดับโดยการประกาศ: int *(*x)[5]; เพื่อให้*xเป็นตัวชี้ไปยังอาร์เรย์ของ 5 intองค์ประกอบที่เป็นตัวชี้ไปยัง นอกจากนี้ผมรู้ว่าx[0] = *(x+0);, x[1] = *(x+1)และอื่น ๆ .... ดังนั้นให้ประกาศข้างต้นเป็นเหตุผลว่าทำไมx[0] != x[0][0] != x[0][0][0]?
149 c++  c  arrays  pointers 

17
พอยน์เตอร์พอยน์คืออะไร?
ฉันไม่ได้พูดถึงพอยน์เตอร์ให้เป็นค่าคงที่ แต่เป็นพอยต์พอยต์ของตัวเอง ฉันกำลังเรียนรู้ C และ C ++ เกินกว่าสิ่งพื้นฐานมากและจนถึงวันนี้ฉันก็ตระหนักว่าตัวชี้ถูกส่งผ่านไปยังฟังก์ชั่นที่มีคุณค่า ซึ่งหมายความว่าภายในฟังก์ชั่นฉันสามารถทำให้ตัวชี้ที่คัดลอกไปยังค่าอื่น ๆ โดยไม่ส่งผลกระทบต่อตัวชี้ดั้งเดิมจากผู้โทร ดังนั้นประเด็นของการมีส่วนหัวของฟังก์ชั่นที่บอกว่า: void foo(int* const ptr); ภายในฟังก์ชั่นดังกล่าวคุณไม่สามารถกำหนดจุด ptr เป็นอย่างอื่นได้เนื่องจากเป็นค่าคงที่และคุณไม่ต้องการให้แก้ไข แต่เป็นฟังก์ชันดังนี้: void foo(int* ptr); ทำงานได้ดีเช่นกัน! เนื่องจากตัวชี้ถูกคัดลอกแล้วและตัวชี้ในผู้โทรจะไม่ได้รับผลกระทบแม้ว่าคุณจะแก้ไขการคัดลอก ดังนั้นข้อดีของ const คืออะไร
149 c++  c  pointers  const 

3
เขียนเป็นไฟล์. txt หรือไม่
ฉันจะเขียนข้อความเล็กน้อยลงใน.txtไฟล์ได้อย่างไร ฉันใช้ Google มานานกว่า 3-4 ชั่วโมง แต่ไม่สามารถหาวิธีทำได้ fwrite(); มีข้อโต้แย้งมากมายและฉันไม่รู้วิธีใช้ ฟังก์ชั่นที่ง่ายที่สุดในการใช้งานเมื่อคุณต้องการเขียนชื่อและตัวเลขสองสามตัวไปยัง.txtไฟล์คืออะไร? แก้ไข: เพิ่มรหัสชิ้นหนึ่งของฉัน char name; int number; FILE *f; f = fopen("contacts.pcl", "a"); printf("\nNew contact name: "); scanf("%s", &name); printf("New contact number: "); scanf("%i", &number); fprintf(f, "%c\n[ %d ]\n\n", name, number); fclose(f);
149 c  linux 

8
แปลงโปรแกรม Python เป็นรหัส C / C ++ หรือไม่ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ เป็นไปได้ไหมที่จะแปลงโปรแกรม Python เป็น C / C ++ ฉันต้องใช้อัลกอริธึมสองสามอย่างและฉันไม่แน่ใจว่าช่องว่างของประสิทธิภาพนั้นใหญ่พอที่จะพิสูจน์ความเจ็บปวดทั้งหมดที่ฉันได้รับเมื่อทำใน C / C ++ (ซึ่งฉันไม่ค่อยเก่ง) ฉันคิดถึงการเขียนอัลกอริธึมง่ายๆและเปรียบเทียบกับโซลูชันที่แปลงแล้ว ถ้าอย่างเดียวนั้นเร็วกว่ารุ่น Python อย่างมากฉันจะไม่มีทางเลือกอื่นนอกจากทำใน C / C ++
149 c++  python  c  code-generation 

2
รหัส C ที่พิมพ์จาก 1 ถึง 1,000 โดยไม่มีลูปหรือคำสั่งแบบมีเงื่อนไขทำงานอย่างไร
ฉันพบCรหัสที่พิมพ์จาก 1 ถึง 1,000 โดยไม่มีลูปหรือเงื่อนไข : แต่ฉันไม่เข้าใจวิธีการทำงาน ทุกคนสามารถอ่านรหัสและอธิบายแต่ละบรรทัดได้หรือไม่ #include <stdio.h> #include <stdlib.h> void main(int j) { printf("%d\n", j); (&main + (&exit - &main)*(j/1000))(j+1); }

5
ทำไมรหัสนี้มีความเสี่ยงที่จะบัฟเฟอร์การโจมตีล้น?
int func(char* str) { char buffer[100]; unsigned short len = strlen(str); if(len >= 100) { return (-1); } strncpy(buffer,str,strlen(str)); return 0; } รหัสนี้มีความเสี่ยงต่อการโจมตีแบบ buffer overflow และฉันพยายามหาสาเหตุ ฉันคิดว่ามันเกี่ยวกับlenการได้รับการประกาศshortแทนที่จะเป็นintแต่ฉันไม่แน่ใจจริงๆ ความคิดใด ๆ

9
ฉันจะพิมพ์ประเภทเช่น off_t และ size_t ได้อย่างไร
ฉันพยายามที่จะพิมพ์ประเภทเช่นและoff_t size_tตัวยึดตำแหน่งที่ถูกต้องสำหรับprintf() อุปกรณ์พกพาคืออะไร หรือมีวิธีที่แตกต่างอย่างสิ้นเชิงในการพิมพ์ตัวแปรเหล่านั้น?

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