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

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

12
C ไม่ใช่ส่วนย่อยของ C ++ อยู่ที่ไหน [ปิด]
ปิด . คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เน้นไปที่ปัญหาเดียวโดยแก้ไขโพสต์นี้เท่านั้น ปิดให้บริการใน6 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันอ่านหนังสือหลายเล่มที่ C เป็นส่วนย่อยของ C ++ หนังสือบางเล่มบอกว่า C เป็นส่วนหนึ่งของ C ++ ยกเว้นสำหรับรายละเอียดเล็ก ๆ น้อย ๆ มีกรณีใดบ้างที่โค้ดจะคอมไพล์ใน C แต่ไม่ใช่ C ++
116 c++  c 

9
'const int' กับ 'int const' เป็นพารามิเตอร์ฟังก์ชันใน C ++ และ C
พิจารณา: int testfunc1 (const int a) { return a; } int testfunc2 (int const a) { return a; } สองหน้าที่นี้เหมือนกันทุกประการหรือไม่หรือมีความแตกต่างกันอย่างไร? ฉันสนใจคำตอบสำหรับภาษา C แต่ถ้ามีอะไรน่าสนใจในภาษา C ++ ฉันก็อยากรู้เช่นกัน
116 c++  c  const 

3
การเริ่มต้นโครงสร้างเป็น 0
ถ้าฉันมีโครงสร้างแบบนี้: typedef struct { unsigned char c1; unsigned char c2; } myStruct; อะไรคือวิธีที่ง่ายที่สุดในการเริ่มต้นโครงสร้างนี้เป็น 0 ต่อไปนี้จะเพียงพอหรือไม่? myStruct _m1 = {0}; หรือฉันจะต้องทำให้สมาชิกแต่ละคนเป็น 0 อย่างชัดเจน? myStruct _m2 = {0,0};
116 c  struct  initialization 

3
ความแตกต่างระหว่าง #if กำหนด (WIN32) และ #ifdef (WIN32)
ฉันกำลังรวบรวมโปรแกรมของฉันที่จะทำงานบน linux gcc 4.4.1 C99 ฉันแค่ใส่ #defines เพื่อแยกโค้ดที่จะคอมไพล์บน windows หรือ linux อย่างไรก็ตามฉันได้รับข้อผิดพลาดนี้ error: macro names must be identifiers. โดยใช้รหัสนี้ #ifdef(WIN32) /* Do windows stuff #elif(UNIX) /* Do linux stuff */ #endif อย่างไรก็ตามเมื่อฉันเปลี่ยนเป็นข้อผิดพลาดได้รับการแก้ไข: #if defined(WIN32) /* Do windows stuff #elif(UNIX) /* Do linux stuff */ #endif ฉันแค่สงสัยว่าทำไมฉันถึงได้รับข้อผิดพลาดนั้นและทำไม #defines จึงแตกต่างกัน ขอบคุณมาก,
116 c 

3
จะประกาศโครงสร้างในส่วนหัวที่จะใช้โดยไฟล์หลาย ๆ ไฟล์ใน c ได้อย่างไร?
ถ้าฉันมีไฟล์ source.c ที่มีโครงสร้าง: struct a { int i; struct b { int j; } }; โครงสร้างนี้สามารถใช้ในไฟล์อื่น (เช่นfunc.c) ได้อย่างไร? ฉันควรสร้างไฟล์ส่วนหัวใหม่ประกาศโครงสร้างที่นั่นและรวมส่วนหัวนั้นไว้ด้วยfunc.cหรือไม่ หรือฉันควรกำหนดโครงสร้างทั้งหมดในไฟล์ส่วนหัวและรวมไว้ในทั้งสองsource.cและfunc.c? โครงสร้างสามารถประกาศexternในทั้งสองไฟล์ได้อย่างไร? ควรtypedefหรือไม่ ถ้าเป็นอย่างไร
115 c  file  header  structure 

8
อนุญาตให้ใช้ดัชนีอาร์เรย์เชิงลบใน C หรือไม่
ฉันเพิ่งอ่านโค้ดบางส่วนและพบว่าบุคคลนั้นกำลังใช้arr[-2]เพื่อเข้าถึงองค์ประกอบที่ 2 ก่อนหน้าarrนี้: |a|b|c|d|e|f|g| ^------------ arr[0] ^---------- arr[1] ^---------------- arr[-2] อนุญาตหรือไม่ ฉันรู้ว่าarr[x]เป็นเช่นเดียวกับ*(arr + x). นั่นarr[-2]คือ*(arr - 2)ซึ่งดูเหมือนว่าตกลง คุณคิดอย่างไร?
115 c  arrays 



6
ขนาดสแต็กสูงสุดของโปรแกรม C / C ++
ฉันต้องการทำ DFS บนอาร์เรย์ 100 X 100 (พูดว่าองค์ประกอบของอาร์เรย์แสดงถึงโหนดกราฟ) ดังนั้นสมมติว่ากรณีที่เลวร้ายที่สุดความลึกของการเรียกฟังก์ชันแบบเรียกซ้ำอาจสูงถึง 10,000 โดยการเรียกแต่ละครั้งใช้เวลาไม่เกิน 20 ไบต์ ดังนั้นจึงเป็นไปได้ว่ามีความเป็นไปได้ที่จะเกิด stackoverflow หรือไม่? ขนาดสูงสุดของสแต็กใน C / C ++ คืออะไร? โปรดระบุสำหรับ gcc สำหรับทั้ง 1) cygwin บน Windows 2) Unix ข้อ จำกัด ทั่วไปคืออะไร?
115 c++  c  stack 

4
เปลี่ยนซ็อกเก็ตธรรมดาให้เป็นซ็อกเก็ต SSL
ฉันเขียนโปรแกรม C อย่างง่ายซึ่งใช้ซ็อกเก็ต ('ไคลเอนต์' และ 'เซิร์ฟเวอร์') (การใช้งาน UNIX / Linux) ฝั่งเซิร์ฟเวอร์สร้างซ็อกเก็ต: sockfd = socket(AF_INET, SOCK_STREAM, 0); จากนั้นผูกเข้ากับ sockaddr: bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)); และฟัง (และยอมรับและอ่าน): listen(sockfd,5); newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); read(newsockfd,buffer,255); ไคลเอนต์สร้างซ็อกเก็ตจากนั้นเขียนลงในซ็อกเก็ต ตอนนี้ฉันต้องการแปลงการเชื่อมต่อแบบธรรมดานี้เป็นการเชื่อมต่อ SSL ด้วยวิธีที่เรียบง่ายงดงามที่สุดเรียบร้อยที่สุดและรวดเร็วที่สุด ฉันพยายามเพิ่มOpenSSLในโปรเจ็กต์ของฉันแล้ว แต่ฉันไม่พบวิธีง่ายๆในการนำสิ่งที่ฉันต้องการไปใช้
115 c  linux  sockets  unix  ssl 

12
ประเภทข้อมูล C“ ได้รับการสนับสนุนโดยตรงจากคอมพิวเตอร์ส่วนใหญ่” อย่างไร
ฉันกำลังอ่าน“ ภาษาการเขียนโปรแกรม C”ของ K & R และเจอข้อความนี้ [Introduction, p. 3]: เนื่องจากชนิดข้อมูลและโครงสร้างการควบคุมที่จัดเตรียมโดย C ได้รับการสนับสนุนโดยตรงจากคอมพิวเตอร์ส่วนใหญ่ไลบรารีรันไทม์ที่จำเป็นในการติดตั้งโปรแกรมในตัวจึงมีขนาดเล็ก คำสั่งเป็นตัวหนาหมายถึงอะไร? มีตัวอย่างประเภทข้อมูลหรือโครงสร้างการควบคุมที่คอมพิวเตอร์ไม่รองรับโดยตรงหรือไม่
114 c 

8
เธรดมีฮีปที่แตกต่างกันหรือไม่?
เท่าที่ฉันรู้ว่าแต่ละเธรดได้รับสแต็กที่แตกต่างกันเมื่อเธรดถูกสร้างขึ้นโดยระบบปฏิบัติการ ฉันสงสัยว่าแต่ละเธรดมีฮีปที่แตกต่างกันหรือไม่?

12
ขั้นตอนวิธีค่ามัธยฐานแบบโรลลิ่งใน C
ฉันกำลังทำงานกับอัลกอริทึมเพื่อใช้ตัวกรองค่ามัธยฐานแบบกลิ้ง (คล้ายกับตัวกรองค่าเฉลี่ยแบบกลิ้ง) ใน C. จากการค้นหาวรรณกรรมของฉันดูเหมือนว่าจะมีสองวิธีที่มีประสิทธิภาพพอสมควร อันดับแรกคือการจัดเรียงหน้าต่างเริ่มต้นของค่าจากนั้นทำการค้นหาแบบไบนารีเพื่อแทรกค่าใหม่และลบค่าที่มีอยู่ออกในการวนซ้ำแต่ละครั้ง ประการที่สอง (จาก Hardle and Steiger, 1995, JRSS-C, Algorithm 296) สร้างโครงสร้างฮีปแบบปลายคู่โดยมี Maxheap ที่ปลายด้านหนึ่งมินฮ็อปอีกด้านหนึ่งและค่ามัธยฐานอยู่ตรงกลาง สิ่งนี้ให้ผลอัลกอริทึมเวลาเชิงเส้นแทนที่จะเป็นหนึ่งที่เป็น O (n log n) นี่คือปัญหาของฉัน: การนำแบบเดิมมาใช้นั้นทำได้ แต่ฉันต้องเรียกใช้สิ่งนี้กับอนุกรมเวลานับล้านดังนั้นประสิทธิภาพจึงมีความสำคัญมาก ข้อหลังนี้พิสูจน์ได้ยากมากที่จะนำไปใช้ ฉันพบรหัสในไฟล์ Trunmed.c ของรหัสสำหรับแพ็คเกจสถิติของ R แต่มันค่อนข้างจะอ่านไม่ออก มีใครรู้จักการใช้งาน C ที่เขียนมาอย่างดีสำหรับอัลกอริธึมค่ามัธยฐานการหมุนเวลาเชิงเส้นหรือไม่? แก้ไข: ลิงก์ไปยังโค้ด Trunmed.c http://google.com/codesearch/p?hl=th&sa=N&cd=1&ct=rc#mYw3h_Lb_e0/R-2.2.0/src/library/stats/src/Trunmed.c
114 c  algorithm  r  statistics  median 

15
strtok () แยกสตริงออกเป็นโทเค็นใน C ได้อย่างไร?
กรุณาอธิบายการทำงานของstrtok()ฟังก์ชัน คู่มือระบุว่าแบ่งสตริงออกเป็นโทเค็น ฉันไม่เข้าใจจากคู่มือว่ามันทำอะไรได้จริง ฉันเพิ่มนาฬิกาstrและ*pchเพื่อตรวจสอบการทำงานเมื่อเกิดขึ้นในขณะที่ลูปครั้งแรกเนื้อหาstrมีเพียง "สิ่งนี้" ผลลัพธ์ที่แสดงด้านล่างถูกพิมพ์ออกมาบนหน้าจออย่างไร? /* strtok example */ #include <stdio.h> #include <string.h> int main () { char str[] ="- This, a sample string."; char * pch; printf ("Splitting string \"%s\" into tokens:\n",str); pch = strtok (str," ,.-"); while (pch != NULL) { printf ("%s\n",pch); pch = strtok (NULL, …
114 c  string  split  token  strtok 

9
อะไรคือความแตกต่างระหว่างตัวอธิบายไฟล์และตัวชี้ไฟล์?
ฉันต้องการทราบความแตกต่างระหว่างตัวอธิบายไฟล์และตัวชี้ไฟล์ นอกจากนี้คุณจะใช้สถานการณ์ใดแทนอีกสถานการณ์หนึ่ง

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