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

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

25
ทำไมการใช้ alloca () จึงไม่ถือว่าเป็นแนวปฏิบัติที่ดี?
alloca()malloc()หน่วยความจำที่จัดสรรในกองมากกว่าในกองเช่นในกรณีของ ดังนั้นเมื่อฉันกลับจากรูทีนหน่วยความจำจะถูกปล่อยให้เป็นอิสระ ดังนั้นที่จริงแล้วสิ่งนี้แก้ปัญหาของฉันในการเพิ่มหน่วยความจำที่จัดสรรแบบไดนามิก การเพิ่มจำนวนของหน่วยความจำที่จัดสรรผ่านmalloc()นั้นเป็นเรื่องที่น่าปวดหัวอย่างมากและหากพลาดไปก็จะทำให้เกิดปัญหาหน่วยความจำทุกประเภท ทำไมการใช้งานalloca()ท้อแท้ทั้งๆที่มีคุณสมบัติข้างต้น?
400 c  stack  malloc  allocation  alloca 

16
การเชื่อมโยงแบบคงที่เทียบกับการเชื่อมโยงแบบไดนามิก
มีเหตุผลด้านประสิทธิภาพที่น่าสนใจในการเลือกการเชื่อมโยงแบบคงที่มากกว่าการเชื่อมโยงแบบไดนามิกหรือในทางกลับกันในบางสถานการณ์? ฉันได้ยินหรืออ่านข้อความต่อไปนี้ แต่ฉันไม่รู้เรื่องเพียงพอที่จะรับรองความจริง 1) ความแตกต่างของประสิทธิภาพรันไทม์ระหว่างการลิงก์แบบสแตติกและการลิงก์แบบไดนามิกนั้นมักจะเล็กน้อย 2) (1) ไม่เป็นความจริงหากใช้คอมไพเลอร์การทำโปรไฟล์ที่ใช้ข้อมูลโปรไฟล์เพื่อออพติคอลฮอตพา ธ ของโปรแกรมเนื่องจากการเชื่อมโยงแบบสแตติกคอมไพเลอร์สามารถปรับทั้งโค้ดของคุณและรหัสไลบรารี ด้วยการเชื่อมโยงแบบไดนามิกรหัสของคุณเท่านั้นที่สามารถเพิ่มประสิทธิภาพ หากใช้เวลาส่วนใหญ่ในการเรียกใช้รหัสห้องสมุดอาจทำให้เกิดความแตกต่างอย่างมาก มิฉะนั้น (1) ยังคงใช้

12
ฉันจะค้นหาเอกสารมาตรฐาน C หรือ C ++ ปัจจุบันได้ที่ไหน
คำตอบของคำถามนี้เป็นความพยายามของชุมชน แก้ไขคำตอบที่มีอยู่เพื่อปรับปรุงโพสต์นี้ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ คุณเลือกใช้Stack Overflow ในภาษาอังกฤษ : Гдевзятьстандарт C ++? สำหรับคำถามมากมายคำตอบดูเหมือนจะพบได้ใน "มาตรฐาน" อย่างไรก็ตามเราจะพบสิ่งนั้นได้ที่ไหน ออนไลน์ยิ่งกว่า Googling บางครั้งอาจรู้สึกไร้ประโยชน์อีกครั้งโดยเฉพาะอย่างยิ่งสำหรับมาตรฐาน C เนื่องจากพวกเขาจมน้ำตายในการอภิปรายในฟอรัมโปรแกรม ในการเริ่มต้นสิ่งนี้เนื่องจากสิ่งเหล่านี้เป็นสิ่งที่ฉันกำลังค้นหาอยู่ตอนนี้มีแหล่งข้อมูลออนไลน์ที่ดีสำหรับ: C89 C99 C11 C ++ 98 C ++ 03 C ++ 11 C ++ 14 C ++ 17
394 c++  c  standards  c++-faq 

11
มันอันตรายแค่ไหนในการเปรียบเทียบค่าทศนิยม
ฉันรู้ว่าUIKitใช้CGFloatเพราะระบบพิกัดความละเอียดอิสระ แต่ทุกครั้งที่ผมต้องการตรวจสอบเช่นถ้าframe.origin.xเป็น0มันทำให้ฉันรู้สึกป่วย if (theView.frame.origin.x == 0) { // do important operation } ไม่ได้เป็นCGFloatความเสี่ยงที่จะบวกเท็จเมื่อเทียบกับ==, <=, >=, <, >? มันเป็นจุดลอยตัวและพวกเขามีปัญหาที่ไม่แม่นยำ0.0000000000041เช่น: การObjective-Cจัดการภายในนี้เกิดขึ้นเมื่อทำการเปรียบเทียบหรือเกิดขึ้นที่สิ่งorigin.xที่อ่านเป็นศูนย์ไม่ได้เปรียบเทียบกับ0ความจริง

6
วิธีที่เร็วที่สุดในการพิจารณาว่าจำนวนเต็มอยู่ระหว่างสองจำนวนเต็ม (รวม) กับชุดของค่าที่ทราบ
มีวิธีเร็วกว่าx >= start && x <= endใน C หรือ C ++ เพื่อทดสอบว่าจำนวนเต็มอยู่ระหว่างสองจำนวนเต็ม? อัปเดต : แพลตฟอร์มเฉพาะของฉันคือ iOS นี่เป็นส่วนหนึ่งของฟังก์ชันเบลอเบลอที่ จำกัด พิกเซลไว้ที่วงกลมในสี่เหลี่ยมจัตุรัสที่กำหนด UPDATE : หลังจากที่พยายามตอบรับผมได้มีคำสั่งเพิ่มความเร็วขนาดในหนึ่งบรรทัดของรหัสมากกว่าทำมันปกติx >= start && x <= endทาง UPDATE : นี่คือโค้ดหลังและก่อนหน้ากับแอสเซมเบลอร์จาก XCode: วิธีการใหม่ // diff = (end - start) + 1 #define POINT_IN_RANGE_AND_INCREMENT(p, range) ((p++ - range.start) < range.diff) Ltmp1313: …
389 c++  c  performance  math 

10
ทำไมฟังก์ชั่นที่ไม่มีพารามิเตอร์ (เมื่อเปรียบเทียบกับนิยามของฟังก์ชันจริง) คอมไพล์?
ฉันเพิ่งเจอรหัส C ของใครบางคนที่ฉันสับสนว่าทำไมมันถึงรวบรวม มีสองประเด็นที่ฉันไม่เข้าใจ ก่อนอื่นฟังก์ชั่นต้นแบบนั้นไม่มีพารามิเตอร์เทียบกับนิยามฟังก์ชันจริง ประการที่สองพารามิเตอร์ในการกำหนดฟังก์ชั่นไม่ได้มีประเภท #include <stdio.h> int func(); int func(param) { return param; } int main() { int bla = func(10); printf("%d", bla); } ทำไมจึงใช้งานได้ ฉันได้ทดสอบมันในคอมไพเลอร์สองสามอันและมันใช้งานได้ดี


11
ฟรีจะรู้ได้อย่างไรว่าฟรีมากแค่ไหน?
ในการเขียนโปรแกรม C คุณสามารถส่งตัวชี้ชนิดใดก็ได้ที่คุณชอบเป็นอาร์กิวเมนต์ให้เป็นอิสระมันจะทราบขนาดของหน่วยความจำที่จัดสรรให้ว่างได้อย่างไร เมื่อใดก็ตามที่ฉันส่งตัวชี้ไปยังฟังก์ชั่นบางอย่างฉันต้องผ่านขนาด (เช่นอาร์เรย์ขององค์ประกอบ 10 ต้องรับ 10 เป็นพารามิเตอร์เพื่อทราบขนาดของอาร์เรย์) แต่ฉันไม่ต้องส่งขนาดไปยัง ฟังก์ชั่นฟรี ทำไมไม่และฉันสามารถใช้เทคนิคเดียวกันนี้ในฟังก์ชั่นของฉันเองเพื่อช่วยให้ฉันไม่จำเป็นต้องซื้อรอบตัวแปรพิเศษของความยาวของอาร์เรย์?
384 c  size  pointers  free 


12
คุณจะทำการฟอร์แมท int long ที่ไม่ได้ลงนามโดยใช้ printf ได้อย่างไร?
#include <stdio.h> int main() { unsigned long long int num = 285212672; //FYI: fits in 29 bits int normalInt = 5; printf("My number is %d bytes wide and its value is %ul. A normal number is %d.\n", sizeof(num), num, normalInt); return 0; } เอาท์พุท: My number is 8 bytes wide …

17
คุณจะรับเอาต์พุตแอสเซมเบลอร์จากแหล่ง C / C ++ เป็น gcc ได้อย่างไร
คนเราจะทำสิ่งนี้ได้อย่างไร หากฉันต้องการวิเคราะห์ว่ามีบางสิ่งที่รวบรวมได้ฉันจะได้รับรหัสแอสเซมบลีที่ปล่อยออกมาได้อย่างไร
379 c++  c  debugging  gcc  assembly 

6
ฉันจะพิมพ์ค่าทั้งหมดของสตริงแบบยาวใน gdb ได้อย่างไร?
ฉันต้องการพิมพ์ความยาวเต็มของ C-string ใน GDB โดยค่าเริ่มต้นมันเป็นตัวย่อฉันจะบังคับให้ GDB พิมพ์สตริงทั้งหมดได้อย่างไร
376 c++  c  string  debugging  gdb 

14
การอ้างอิงที่ไม่ได้กำหนดถึง pthread_create ใน Linux
ฉันเลือกตัวอย่างต่อไปนี้จากเว็บจากhttps://computing.llnl.gov/tutorials/pthreads/ #include <pthread.h> #include <stdio.h> #define NUM_THREADS 5 void *PrintHello(void *threadid) { long tid; tid = (long)threadid; printf("Hello World! It's me, thread #%ld!\n", tid); pthread_exit(NULL); } int main (int argc, char *argv[]) { pthread_t threads[NUM_THREADS]; int rc; long t; for(t=0; t<NUM_THREADS; t++){ printf("In main: creating thread %ld\n", t); rc = …

7
ทำไมลำดับของลูปจึงมีผลต่อประสิทธิภาพเมื่อทำการวนซ้ำในอาร์เรย์ 2 มิติ
ด้านล่างนี้เป็นสองโปรแกรมที่เกือบเหมือนกันยกเว้นว่าฉันได้เปลี่ยนiและjตัวแปร พวกเขาทั้งสองทำงานในเวลาต่างกัน มีคนอธิบายได้ไหมว่าทำไมสิ่งนี้ถึงเกิดขึ้น รุ่น 1 #include <stdio.h> #include <stdlib.h> main () { int i,j; static int x[4000][4000]; for (i = 0; i < 4000; i++) { for (j = 0; j < 4000; j++) { x[j][i] = i + j; } } } เวอร์ชัน 2 #include <stdio.h> #include <stdlib.h> main …

4
วิธีเขียนแอป iOS ใน C เท่านั้น
ฉันอ่านที่นี่เรียนรู้ C ก่อน Objective-C? ปกติแล้วฉันจะแทนที่รหัส Obj-C บางส่วนด้วยรหัสบริสุทธิ์ (หลังจากทั้งหมดคุณสามารถผสมได้มากเท่าที่คุณต้องการเนื้อหาของวิธี Obj-C สามารถเป็นรหัส C บริสุทธิ์ทั้งหมด) มันเป็นเรื่องจริงเหรอ? เป็นไปได้หรือไม่ที่จะสร้างแอพ iPhone ในภาษา C อย่างแท้จริง?

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