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

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

10
การส่งอาร์เรย์เป็นอาร์กิวเมนต์ไปยังฟังก์ชันใน C
ฉันเขียนฟังก์ชันที่มีอาร์เรย์เป็นอาร์กิวเมนต์และเรียกใช้โดยการส่งผ่านค่าอาร์เรย์ดังนี้ void arraytest(int a[]) { // changed the array a a[0]=a[0]+a[1]; a[1]=a[0]-a[1]; a[0]=a[0]-a[1]; } void main() { int arr[]={1,2}; printf("%d \t %d",arr[0],arr[1]); arraytest(arr); printf("\n After calling fun arr contains: %d\t %d",arr[0],arr[1]); } สิ่งที่ฉันพบคือแม้ว่าฉันจะเรียกarraytest()ใช้ฟังก์ชันโดยการส่งผ่านค่า แต่สำเนาต้นฉบับint arr[]ก็เปลี่ยนไป คุณช่วยอธิบายได้ไหมว่าทำไม?

4
ข้อผิดพลาด: ไม่ทราบชื่อประเภท 'bool'
ฉันดาวน์โหลดซอร์สโค้ดและต้องการรวบรวมไฟล์สแกนเนอร์ มันทำให้เกิดข้อผิดพลาดนี้: [meepo@localhost cs143-pp1]$ gcc -o lex.yy.o lex.yy.c -ll In file included from scanner.l:15:0: scanner.h:59:5: error: unknown type name ‘bool’ In file included from scanner.l:16:0: utility.h:64:38: error: unknown type name ‘bool’ utility.h:74:1: error: unknown type name ‘bool’ In file included from scanner.l:17:0: errors.h:16:18: fatal error: string: No such file or …
88 c  gcc  lex 

4
ตัวแปรสแต็กถูกจัดแนวโดย GCC __attribute __ ((aligned (x))) หรือไม่
ฉันมีรหัสต่อไปนี้: #include <stdio.h> int main(void) { float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0}; printf("%p %p %p %p\n", &a[0], &a[1], &a[2], &a[3]); } และฉันมีผลลัพธ์ต่อไปนี้: 0x7fffbfcd2da0 0x7fffbfcd2da4 0x7fffbfcd2da8 0x7fffbfcd2dac ทำไมที่อยู่ของ a[0]ไม่ได้เป็นหลาย0x1000? อะไรกันแน่ __attribute__((aligned(x))) ? ฉันเข้าใจคำอธิบายนี้ผิด? ฉันใช้ gcc 4.1.2

17
C ถูกพิมพ์อย่างรุนแรงหรือไม่?
หากต้องการอ้างอิงWikipedia : ภาษาที่ใช้กันทั่วไปสองภาษาที่รองรับการแปลงโดยนัยหลายประเภทคือ C และ C ++ และบางครั้งก็อ้างว่าเป็นภาษาที่พิมพ์ไม่ชัดเจน อย่างไรก็ตามคนอื่น ๆ ให้เหตุผลว่าภาษาเหล่านี้มีข้อ จำกัด เพียงพอเกี่ยวกับวิธีผสมตัวถูกดำเนินการของประเภทต่างๆที่ทั้งสองควรถือเป็นภาษาที่พิมพ์อย่างรุนแรง มีคำตอบที่ชัดเจนกว่านี้หรือไม่?


4
ทำไม rand () ทำซ้ำตัวเลขบ่อยกว่าบน Linux มากกว่า Mac?
ฉันใช้ hashmap ใน C เป็นส่วนหนึ่งของโครงการที่ฉันกำลังทำงานและใช้การแทรกแบบสุ่มเพื่อทดสอบเมื่อฉันสังเกตเห็นว่าrand()บน Linux ดูเหมือนว่าจะซ้ำตัวเลขบ่อยกว่าบน Mac RAND_MAXคือ 2147483647 / 0x7FFFFFFF บนทั้งสองแพลตฟอร์ม ฉันได้ลดขนาดลงในโปรแกรมทดสอบนี้ที่ทำให้อาร์เรย์แบบRAND_MAX+1ยาว - ยาวสร้างRAND_MAXตัวเลขแบบสุ่มบันทึกว่าแต่ละรายการซ้ำกันหรือไม่และตรวจสอบออกจากรายการตามที่เห็น #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> int main() { size_t size = ((size_t)RAND_MAX) + 1; char *randoms = calloc(size, sizeof(char)); int dups = 0; srand(time(0)); for (int i = 0; i < …
87 c  linux  macos  random 

3
จะแก้ไขเนื้อหาหน่วยความจำโดยใช้ GDB ได้อย่างไร
ฉันรู้ว่าเราสามารถใช้คำสั่งต่างๆเพื่อเข้าถึงและอ่านหน่วยความจำได้เช่น print, p, x ... แต่ฉันจะเปลี่ยนเนื้อหาของหน่วยความจำในตำแหน่งใดก็ได้ (ในขณะที่แก้ไขข้อบกพร่องใน GDB) ได้อย่างไร
87 c  linux  memory  gdb 

2
เหตุใด C และ C ++ จึงอนุญาตให้ใช้นิพจน์ (int) + 4 * 5
(int) + 4*5; นี่คือเหตุผลที่(การเพิ่มชนิดที่มีค่า)ไปได้หรือไม่ (ลองใช้ g ++ และ gcc.) ฉันรู้ว่ามันไม่สมเหตุสมผล (และไม่มีผล) แต่ฉันอยากรู้ว่าทำไมถึงเป็นไปได้

6
โดยเฉพาะสิ่งที่เป็นอันตรายในการคัดเลือกผลลัพธ์ของ malloc?
ก่อนที่ผู้คนจะเริ่มทำเครื่องหมายสิ่งนี้ฉันได้อ่านสิ่งต่อไปนี้ทั้งหมดซึ่งไม่มีคำตอบใดที่ให้คำตอบที่ฉันกำลังมองหา: C คำถามที่พบบ่อย: การร่ายค่าตอบแทนของ malloc มีอะไรผิดปกติ? SO: ฉันควรโยนค่าตอบแทนของ malloc () อย่างชัดเจนหรือไม่ SO: ตัวชี้ที่ไม่จำเป็นต้องร่ายใน C SO: ฉันสร้างผลลัพธ์ของ malloc หรือไม่? ทั้งคำถามที่พบบ่อยเกี่ยวกับ C และคำตอบมากมายสำหรับคำถามข้างต้นกล่าวถึงข้อผิดพลาดที่ลึกลับซึ่งmallocค่าส่งคืนของการหล่อสามารถซ่อนได้ อย่างไรก็ตามไม่มีคนใดให้ตัวอย่างเฉพาะของข้อผิดพลาดดังกล่าวในทางปฏิบัติ ตอนนี้ให้ความสนใจที่ผมกล่าวว่าข้อผิดพลาดไม่เตือน ตอนนี้ได้รับรหัสต่อไปนี้: #include <string.h> #include <stdio.h> // #include <stdlib.h> int main(int argc, char** argv) { char * p = /*(char*)*/malloc(10); strcpy(p, "hello"); printf("%s\n", p); return 0; } การคอมไพล์โค้ดด้านบนด้วย …
87 c 

8
จะหลีกเลี่ยงการใช้ printf ในเครื่องจัดการสัญญาณได้อย่างไร?
เนื่องจากprintfไม่ได้รับการส่งกลับจึงไม่ควรใช้ในเครื่องจัดการสัญญาณอย่างปลอดภัย แต่ฉันเคยเห็นโค้ดตัวอย่างมากมายที่ใช้printfวิธีนี้ ดังนั้นคำถามของฉันคือเมื่อใดที่เราต้องหลีกเลี่ยงการใช้printfในเครื่องจัดการสัญญาณและมีการแนะนำให้เปลี่ยนหรือไม่
87 c  linux  signals 

6
อาร์เรย์ที่ปรับเปลี่ยนได้หลากหลายที่ขอบเขตไฟล์
ฉันต้องการสร้างอาร์เรย์คงที่เพื่อใช้กับไฟล์การใช้งาน Objective-C ของฉันที่คล้ายกับสิ่งนี้ที่ระดับบนสุดของไฟล์ ".m" ของฉัน: static const int NUM_TYPES = 4; static int types[NUM_TYPES] = { 1, 2, 3, 4 }; ฉันวางแผนที่จะใช้ในNUM_TYPESภายหลังในไฟล์ดังนั้นฉันจึงต้องการใส่ไว้ในตัวแปร อย่างไรก็ตามเมื่อฉันดำเนินการนี้ฉันได้รับข้อผิดพลาด "ประเภท" ที่ปรับเปลี่ยนได้หลากหลายที่ขอบเขตไฟล์ " ฉันรวบรวมว่าสิ่งนี้อาจเกี่ยวข้องกับขนาดอาร์เรย์ที่เป็นตัวแปร (ฉันไม่ได้รับข้อความนี้เมื่อฉันใส่ลิเทอรัลจำนวนเต็มเช่นstatic int types[4]) ฉันต้องการแก้ไขปัญหานี้ แต่บางทีฉันอาจจะคิดผิดทั้งหมด ... ฉันมี 2 เป้าหมายที่นี่: มีอาร์เรย์ที่สามารถเข้าถึงได้ทั่วทั้งไฟล์ ในการห่อหุ้มNUM_TYPESเป็นตัวแปรดังนั้นฉันจึงไม่มีตัวอักษรเดียวกันกระจัดกระจายอยู่ตามที่ต่างๆในไฟล์ของฉัน ข้อเสนอแนะใด ๆ ? [แก้ไข] พบสิ่งนี้ในคำถามที่พบบ่อยเกี่ยวกับ C: http://c-faq.com/ansi/constasconst.html

16
วิธีเขียนโค้ดตัวดำเนินการ modulo (%) ใน C / C ++ / Obj-C ที่จัดการตัวเลขติดลบ
สัตว์เลี้ยงตัวหนึ่งของฉันเกลียดภาษาที่ได้รับ C (ในฐานะนักคณิตศาสตร์) ก็คือ (-1) % 8 // comes out as -1, and not 7 fmodf(-1,8) // fails similarly ทางออกที่ดีที่สุดคืออะไร? C ++ ช่วยให้แม่แบบและตัวดำเนินการทำงานมากเกินไป แต่ทั้งสองอย่างนี้เป็นน้ำที่ขุ่นมัวสำหรับฉัน ตัวอย่างที่ได้รับอย่างซาบซึ้ง

12
คงยืนยันใน C
วิธีใดที่ดีที่สุดในการบรรลุการยืนยันแบบคงที่ของเวลาคอมไพล์ใน C (ไม่ใช่ C ++) โดยเน้นเฉพาะ GCC

15
ตัวดำเนินการ Unary plus ทำอะไร?
ตัวดำเนินการ Unary plus ทำอะไร? มีคำจำกัดความหลายอย่างที่ฉันพบ ( ที่นี่และที่นี่ ) แต่ฉันยังไม่รู้ว่าจะใช้ทำอะไร ดูเหมือนว่ามันจะไม่ได้ทำอะไรเลย แต่มันมีเหตุผลใช่มั้ย?
87 c#  c++  c  unary-operator 

15
รางติดตั้ง pg - ไม่พบส่วนหัว 'libpq-fe.h
$ sudo bundle install ผลลัพธ์ Fetching gem metadata from https://rubygems.org/........... Fetching gem metadata from https://rubygems.org/.. Using rake (0.9.2.2) Using i18n (0.6.1) Using multi_json (1.3.6) Using activesupport (3.2.8) Using builder (3.0.4) Using activemodel (3.2.8) Using erubis (2.7.0) Using journey (1.0.4) Using rack (1.4.1) Using rack-cache (1.2) Using rack-test (0.6.2) Using hike …

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