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

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

8
การใช้งาน setjmp และ longjmp ในภาษา C
ใครช่วยอธิบายหน่อยได้ไหมว่าที่ไหนsetjmp()และlongjmp()ฟังก์ชันที่สามารถใช้ในการเขียนโปรแกรมแบบฝังได้ ฉันรู้ว่าสิ่งเหล่านี้มีไว้เพื่อจัดการข้อผิดพลาด แต่ฉันต้องการทราบบางกรณีการใช้งาน
99 c 

3
การสร้างไดเร็กทอรีใหม่ใน C
ฉันต้องการเขียนโปรแกรมที่ตรวจสอบการมีอยู่ของไดเร็กทอรี หากไม่มีไดเร็กทอรีนั้นจะสร้างไดเร็กทอรีและล็อกไฟล์ภายในไดเร็กทอรี แต่ถ้ามีไดเร็กทอรีอยู่แล้วก็จะสร้างไฟล์บันทึกใหม่ในโฟลเดอร์นั้น ฉันจะทำสิ่งนี้ใน C กับ Linux ได้อย่างไร
99 c  linux  directory 


2
เหตุใดจึงส่งค่าพารามิเตอร์ของฟังก์ชันที่ไม่ได้ใช้ให้เป็นโมฆะ
ในโครงการ C บางโครงการฉันเห็นรหัสนี้: static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) { (void)ud; (void)osize; /* some code not using `ud` or `osize` */ return ptr; } การร่ายทั้งสองเป็นโมฆะมีจุดประสงค์ใดหรือไม่?
98 c  casting  void 

4
C libcurl รับเอาต์พุตเป็นสตริง
ฉันต้องการเก็บผลลัพธ์ของฟังก์ชัน curl นี้ไว้ในตัวแปรฉันจะทำได้อย่างไร? #include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se"); res = curl_easy_perform(curl); /* always cleanup */ curl_easy_cleanup(curl); } return 0; } ขอบคุณฉันแก้ไขมันดังนี้: #include <stdio.h> #include <stdlib.h> #include <curl/curl.h> function_pt(void *ptr, size_t size, size_t nmemb, void *stream){ printf("%d", …
98 c  libcurl 


11
ประสิทธิภาพของการกลับมาก่อนกำหนดในฟังก์ชัน
นี่เป็นสถานการณ์ที่ฉันพบบ่อยในฐานะโปรแกรมเมอร์ที่ไม่มีประสบการณ์และฉันสงสัยว่าโดยเฉพาะอย่างยิ่งสำหรับโครงการที่มีความทะเยอทะยานและใช้ความเร็วสูงของฉันฉันกำลังพยายามเพิ่มประสิทธิภาพ สำหรับภาษาหลัก ๆ เช่น C (C, objC, C ++, Java, C # ฯลฯ ) และคอมไพเลอร์ตามปกติฟังก์ชันทั้งสองนี้จะทำงานได้อย่างมีประสิทธิภาพหรือไม่ มีความแตกต่างในโค้ดที่คอมไพล์หรือไม่? void foo1(bool flag) { if (flag) { //Do stuff return; } //Do different stuff } void foo2(bool flag) { if (flag) { //Do stuff } else { //Do different stuff } } โดยทั่วไปแล้วจะมีโบนัส / …

14
ข้อผิดพลาด“ การรวมที่ไม่ได้แก้ไข” กับ Eclipse CDT สำหรับส่วนหัวไลบรารีมาตรฐาน C
ฉันตั้งค่า CDT สำหรับ eclipse และเขียนโปรแกรม hello world C ง่ายๆ: #include <stdio.h> int main(void){ puts("Hello, world."); return 0; } โปรแกรมสร้างและทำงานอย่างถูกต้อง แต่ eclipse ยังคงแสดงเครื่องหมายคำถามสีเหลืองนี้ที่ด้านข้างของคำสั่งการรวมที่ระบุว่า"Unresolved inclusion: <stdio.h>"เมื่อฉันวางเมาส์เหนือมัน ไม่มีผลกับการทำงานของโปรแกรม แต่ฉันคิดว่ามันค่อนข้างน่ารำคาญ ใครมีความคิดที่จะลบออกหรือไม่

3
ทำไม sizeof int จึงผิดในขณะที่ sizeof (int) ถูกต้อง
เราทราบดีว่าsizeofเป็นโอเปอเรเตอร์ที่ใช้สำหรับคำนวณขนาดของประเภทข้อมูลและนิพจน์ใด ๆ และเมื่อตัวถูกดำเนินการเป็นนิพจน์คุณสามารถละวงเล็บได้ int main() { int a; sizeof int; sizeof( int ); sizeof a; sizeof( a ); return 0; } การใช้ครั้งแรกsizeofผิดในขณะที่คนอื่นถูก เมื่อคอมไพล์โดยใช้ gcc ข้อความแสดงข้อผิดพลาดต่อไปนี้จะได้รับ: main.c:5:9: error: expected expression before ‘int’ คำถามของฉันคือเหตุใดมาตรฐาน C จึงไม่อนุญาตให้มีการทำงานแบบนี้ จะsizeof intทำให้เกิดความคลุมเครือหรือไม่
97 c++  c  sizeof 

3
"อินไลน์" ที่ไม่มี "คงที่" หรือ "ภายนอก" จะมีประโยชน์ใน C99 หรือไม่?
เมื่อฉันพยายามสร้างรหัสนี้ inline void f() {} int main() { f(); } โดยใช้บรรทัดคำสั่ง gcc -std=c99 -o a a.c ฉันได้รับข้อผิดพลาดตัวเชื่อมโยง (ไม่ได้กำหนดอ้างอิงถึงf) ข้อผิดพลาดจะหายไปหากฉันใช้static inlineหรือextern inlineแทนที่จะเป็นเพียงแค่inlineหรือถ้าฉันคอมไพล์ด้วย-O(ดังนั้นฟังก์ชันจะถูกแทรกในบรรทัด) พฤติกรรมนี้ดูเหมือนจะกำหนดไว้ในย่อหน้า 6.7.4 (6) ของมาตรฐาน C99: หากการประกาศขอบเขตไฟล์ทั้งหมดสำหรับฟังก์ชันในหน่วยการแปลมีตัวinlineระบุฟังก์ชันที่ไม่มีexternคำจำกัดความในหน่วยการแปลนั้นจะเป็นนิยามแบบอินไลน์ คำจำกัดความแบบอินไลน์ไม่ได้ให้คำจำกัดความภายนอกสำหรับฟังก์ชันและไม่ห้ามการกำหนดภายนอกในหน่วยการแปลอื่น นิยามแบบอินไลน์เป็นทางเลือกให้กับนิยามภายนอกซึ่งนักแปลอาจใช้เพื่อเรียกใช้ฟังก์ชันใด ๆ ในหน่วยการแปลเดียวกัน ไม่ได้ระบุว่าการเรียกใช้ฟังก์ชันใช้นิยามอินไลน์หรือนิยามภายนอก ถ้าฉันเข้าใจทั้งหมดนี้อย่างถูกต้องหน่วยคอมไพล์ที่มีฟังก์ชันที่กำหนดไว้inlineในตัวอย่างด้านบนจะคอมไพล์อย่างสม่ำเสมอก็ต่อเมื่อมีฟังก์ชันภายนอกที่มีชื่อเดียวกันและฉันไม่เคยรู้ว่าฟังก์ชันของตัวเองหรือฟังก์ชันภายนอกถูกเรียกใช้ พฤติกรรมนี้ไม่โง่อย่างสมบูรณ์หรือไม่? การกำหนดฟังก์ชันinlineโดยไม่มีstaticหรือexternใน C99 มีประโยชน์หรือไม่? ฉันพลาดอะไรไปรึเปล่า? สรุปคำตอบ แน่นอนว่าฉันพลาดอะไรบางอย่างไปและพฤติกรรมก็ไม่ได้บ้าคลั่ง :) ตามที่Nemo อธิบายแนวคิดคือการกำหนดนิยามของฟังก์ชัน inline void f() {} ในไฟล์ส่วนหัวและมีเพียงการประกาศเท่านั้น extern inline …
97 c  inline  c99 


6
วิธีจัดรูปแบบสตริงโดยใช้ printf () เพื่อให้ได้ความยาวเท่ากันในเอาต์พุต
ฉันมีสองฟังก์ชั่นหนึ่งที่ผลิตข้อความเช่นStarting initialization...และอื่น ๆ ซึ่งการตรวจสอบรหัสกลับและผล"Ok", หรือ"Warning" "Error"อย่างไรก็ตามเอาต์พุตที่ผลิตมีความยาวต่างกัน: Starting initialization...Ok. Checking init scripts...Ok. ฉันจะได้อะไรแบบนี้: Starting initialization... Ok. Checking init scripts... Ok.

11
จะอ่านเนื้อหาของไฟล์เป็นสตริงใน C ได้อย่างไร?
อะไรคือวิธีที่ง่ายที่สุด (มีข้อผิดพลาดน้อยที่สุดโค้ดน้อยที่สุด แต่คุณต้องการตีความ) เพื่อเปิดไฟล์ใน C และอ่านเนื้อหาในสตริง (char *, char [], อะไรก็ได้)?
97 c  string  file 

7
วิธีรวบรวมโดยไม่มีคำเตือนถือว่าเป็นข้อผิดพลาด
ปัญหาคือโค้ดเดียวกันกับที่คอมไพล์บน Windows ไม่สามารถคอมไพล์บน Ubuntu ได้ ทุกครั้งที่ฉันได้รับข้อผิดพลาดนี้: cc1: warnings being treated as errors ตอนนี้มันเป็นฐานรหัสขนาดใหญ่และฉันไม่ชอบแก้ไขคำเตือนทั้งหมด มีวิธีใดบ้างที่ฉันสามารถรวบรวมได้สำเร็จทั้งๆที่มีคำเตือน

6
ตัวดำเนินการทิลเดอร์ใน C
ฉันเคยเห็นตัวดำเนินการตัวหนอนที่ใช้ในอัลกอริทึมการแฮชของ ELF และฉันก็อยากรู้ว่ามันทำอะไร (รหัสมาจาก Eternally Confused ) unsigned elf_hash ( void *key, int len ) { unsigned char *p = key; unsigned h = 0, g; int i; for ( i = 0; i < len; i++ ) { h = ( h << 4 ) + p[i]; g = …
97 c++  c  operators 

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