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

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


2
วัดเวลาใน Linux - เวลาเทียบกับนาฬิกาเทียบกับ getrusage เทียบกับ clock_gettime เทียบกับ gettimeofday เทียบกับ timespec_get?
ท่ามกลางฟังก์ชั่นจับเวลา, time, clock getrusage, clock_gettime, gettimeofdayและtimespec_getผมต้องการที่จะเข้าใจอย่างชัดเจนว่าพวกเขาจะดำเนินการและสิ่งที่มีค่าที่พวกเขากลับมาเพื่อที่จะทราบซึ่งในสถานการณ์ที่ผมต้องใช้พวกเขา แรกที่เราต้องฟังก์ชั่นประเภทกลับค่าผนังนาฬิกาเปรียบเทียบกับฟังก์ชั่นที่กลับมากระบวนการหรือหัวข้อค่า gettimeofdayส่งคืนค่านาฬิกาแขวนclock_gettimeส่งคืนค่านาฬิกาแขวนหรือค่ากระบวนการหรือเธรดขึ้นอยู่กับClockพารามิเตอร์ที่ส่งผ่านไป getrusageและclockคืนค่ากระบวนการ จากนั้นคำถามที่สองเกี่ยวกับการใช้งานฟังก์ชั่นเหล่านี้และเป็นผลให้ความถูกต้องของพวกเขา ฟังก์ชันเหล่านี้ใช้กลไกฮาร์ดแวร์หรือซอฟต์แวร์ใด ดูเหมือนว่าgetrusageจะใช้เฉพาะเคอร์เนลเห็บ (โดยทั่วไปจะมีความยาว 1 มิลลิวินาที) และด้วยเหตุนี้จึงไม่แม่นยำกว่า ms ถูกต้องหรือไม่ จากนั้นgetimeofdayฟังก์ชั่นการใช้งานดูเหมือนว่าจะถูกต้องมากที่สุดฮาร์ดแวร์พื้นฐานที่มีอยู่ ผลที่ตามมาคือความถูกต้องแม่นยำคือไมโครวินาที (ไม่สามารถมากไปกว่าเพราะ API) บนฮาร์ดแวร์ล่าสุด สิ่งที่เกี่ยวกับclockหน้าพูดคนเกี่ยวกับ "ประมาณ" มันหมายความว่าอะไร? สิ่งที่เกี่ยวกับclock_gettimeAPI อยู่ในระดับนาโนวินาทีหมายความว่าสามารถแม่นยำได้หรือไม่ถ้าฮาร์ดแวร์พื้นฐานอนุญาต? แล้วเรื่อง monotonicity ล่ะ? มีฟังก์ชั่นอื่น ๆ อีกหรือไม่?
148 c  linux  time  linux-kernel 

10
อุปกรณ์ของ Duff ทำงานอย่างไร
ฉันได้อ่านบทความเกี่ยวกับ Wikipedia บนอุปกรณ์ของ Duffแล้วและฉันไม่เข้าใจ ฉันสนใจจริงๆ แต่ฉันได้อ่านคำอธิบายที่นั่นสองสามครั้งและฉันก็ยังไม่เข้าใจว่าอุปกรณ์ของ Duff ทำงานอย่างไร คำอธิบายรายละเอียดเพิ่มเติมจะเป็นอย่างไร
147 c  duffs-device 

10
โมฆะหมายถึงอะไรและวิธีการใช้งาน?
วันนี้เมื่อฉันอ่านรหัสของผู้อื่นฉันเห็นสิ่งที่ชอบvoid *func(void* i);สิ่งนี้void*หมายความว่าที่นี่สำหรับชื่อฟังก์ชันและประเภทตัวแปรตามลำดับ นอกจากนี้เราต้องใช้ตัวชี้ประเภทนี้เมื่อใดและจะใช้งานอย่างไร
147 c 

13
ตั้งโปรแกรมเครื่องจักรประจำวันได้อย่างไร?
มีการตั้งโปรแกรมเครื่องจักรในชีวิตประจำวัน (ไม่มากคอมพิวเตอร์และอุปกรณ์มือถือเป็นเครื่องใช้นาฬิกาดิจิตอล ฯลฯ ) เป็นอย่างไร โค้ดประเภทใดที่ใช้ในการเขียนโปรแกรมของเครื่องจำหน่าย Coca-Cola เครื่องชงกาแฟของฉันยอมรับเวลาที่ตั้งโปรแกรมไว้ล่วงหน้าอย่างไรและเริ่มต้มกาแฟชั่วโมงต่อมาเมื่อถึงเวลานั้น เครื่องประเภทนี้มีระบบปฏิบัติการอยู่ภายในหรือไม่หรือเป็นสิ่งที่พื้นฐานกว่านี้หรือไม่ พวกเขาเขียนใน Assembly, C หรือภาษาอื่น ๆ บ้างไหม? และฉันต้องการค้นหาทรัพยากรบางอย่างที่แสดงรายการระบบปฏิบัติการเหล่านี้หรือระบบโค้ดพื้นฐานอาจเป็นไปได้ว่ามีซอร์สโค้ดถ้าเป็นไปได้ ถ้าใครรู้เกี่ยวกับทรัพยากรเช่นนั้น (การค้นหาไม่ได้ผลอะไรเลยสำหรับฉัน) นั่นจะยอดเยี่ยมมาก

2
การอ่านสตริงด้วย scanf
ฉันสับสนเล็กน้อยเกี่ยวกับบางสิ่งบางอย่าง ฉันรู้สึกว่าวิธีที่ถูกต้องในการอ่านสตริง C ที่scanf()ไปด้วยกัน (ไม่ต้องสนใจบัฟเฟอร์ล้นที่เป็นไปได้มันเป็นเพียงตัวอย่างง่ายๆ) char string[256]; scanf( "%s" , string ); อย่างไรก็ตามต่อไปนี้ดูเหมือนว่าจะทำงานด้วย scanf( "%s" , &string ); นี่เป็นเพียงผู้รวบรวม (gcc) ของฉันโชคบริสุทธิ์หรืออย่างอื่นใช่ไหม
147 c  scanf 

9
เหตุใด C ++ แรนด์ () จึงดูเหมือนว่าจะสร้างเฉพาะลำดับความสำคัญเท่ากันเท่านั้น
ในแอปพลิเคชันขนาดเล็กที่เขียนด้วย C / C ++ ฉันกำลังประสบปัญหากับrandฟังก์ชั่นและอาจเป็นเมล็ด: ฉันต้องการสร้างลำดับของตัวเลขสุ่มที่มีคำสั่งต่างกันเช่นมีค่าลอการิทึมที่แตกต่างกัน (ฐาน 2) แต่ดูเหมือนว่าตัวเลขทั้งหมดที่ผลิตมีคำสั่งเดียวกันโดยมีความผันผวนระหว่าง 2 ^ 25 และ 2 ^ 30 เป็นเพราะrand()เมล็ดมีเวลา Unix ซึ่งตอนนี้เป็นจำนวนค่อนข้างมาก? ฉันลืมอะไร ฉันกำลังเพาะเพียงครั้งเดียวที่จุดเริ่มต้นของrand()main()
146 c++  c  math  random 

5
กำหนดโครงสร้างหนึ่งให้กับโครงสร้างอื่นใน C.
คุณสามารถกำหนดหนึ่งอินสแตนซ์ของโครงสร้างให้กับอีกคนหนึ่งได้เช่น: struct Test t1; struct Test t2; t2 = t1; ฉันเคยเห็นมันใช้งานได้กับโครงสร้างที่เรียบง่าย แต่ bu ทำงานกับโครงสร้างที่ซับซ้อนได้หรือไม่ คอมไพเลอร์รู้วิธีการคัดลอกรายการข้อมูลอย่างไรโดยขึ้นอยู่กับประเภทของมันเช่นการแยกแยะระหว่างintสตริงและสตริง
146 c  struct 

6
Const ก่อนหรือ const หลัง?
ในการเริ่มต้นคุณอาจรู้ว่าconstสามารถใช้สร้างข้อมูลของวัตถุหรือตัวชี้ที่ไม่สามารถแก้ไขได้หรือทั้งสองอย่าง const Object* obj; // can't change data Object* const obj; // can't change pointer const Object* const obj; // can't change data or pointer อย่างไรก็ตามคุณยังสามารถใช้ไวยากรณ์: Object const *obj; // same as const Object* obj; สิ่งเดียวที่ดูเหมือนจะสำคัญคือด้านใดของดอกจันที่คุณใส่constคำหลัก โดยส่วนตัวแล้วฉันชอบที่จะใส่constทางด้านซ้ายของประเภทเพื่อระบุว่ามันเป็นข้อมูลที่ไม่สามารถแก้ไขได้เพราะฉันคิดว่ามันอ่านได้ดีกว่าในความคิดจากซ้ายไปขวา แต่ไวยากรณ์ใดมาก่อน ที่สำคัญกว่านั้นคือทำไมมีวิธีการระบุconstข้อมูลที่ถูกต้องสองวิธีและในสถานการณ์ใดที่คุณต้องการหรือต้องการอีกวิธีหนึ่งหากมี แก้ไข: ดังนั้นดูเหมือนว่านี่เป็นการตัดสินใจตามอำเภอใจเมื่อมาตรฐานสำหรับวิธีที่คอมไพเลอร์ควรตีความสิ่งต่าง ๆ ที่ร่างขึ้นมานานก่อนที่ฉันจะเกิด เนื่องจากconstถูกนำไปใช้กับสิ่งที่อยู่ทางซ้ายของคำหลัก (โดยค่าเริ่มต้น) ฉันคิดว่าพวกเขาคิดว่าไม่มีอันตรายใด ๆ ในการเพิ่ม"ทางลัด"เพื่อใช้คำหลักและตัวระบุประเภทในวิธีอื่น ๆ อย่างน้อยก็จนกว่าจะถึงเวลา …
146 c++  c  syntax  const 

4
ความสำคัญของ ios_base :: sync_with_stdio (false); cin.tie (NULL);
ความสำคัญของการรวมคืออะไร ios_base::sync_with_stdio(false); cin.tie(NULL); ในโปรแกรม C ++? ในการทดสอบของฉันมันเร็วขึ้นเวลาดำเนินการ แต่มีกรณีทดสอบที่ฉันควรกังวลเกี่ยวกับการรวมนี้ คำแถลง 2 ต้องอยู่ด้วยกันเสมอหรือเป็นคำแรกที่เพียงพอเช่นเพิกเฉยcin.tie(NULL)? นอกจากนี้ยังอนุญาตให้ใช้คำสั่ง C และ C ++ พร้อมกันได้falseหรือไม่หากค่าถูกตั้งเป็น? https://www.codechef.com/viewsolution/7316085 รหัสข้างต้นทำงานดีจนผมใช้scanf/printfใน C ++ trueโปรแกรมที่มีค่าเป็น ในกรณีนี้มันทำให้เกิดความผิดพลาดในการแบ่งส่วน อะไรคือคำอธิบายที่เป็นไปได้สำหรับสิ่งนี้
146 c++  c 

3
จุดประสงค์ของเครื่องหมายปอนด์ / แฮชเดียว (#) ในบรรทัดของตนเองในตัวประมวลผลล่วงหน้า C / C ++ คืออะไร
ฉันได้ดูซอร์สโค้ดห้องสมุดBoostและฉันสังเกตว่าบ่อยครั้งที่มีสัญญาณปอนด์เดียวโดยไม่มีคำสั่ง preprocessor ติดอยู่ ฉันอ่านคู่มือตัวประมวลผลล่วงหน้าของ GCC และคู่มือข้อกำหนดและไม่พบสิ่งใดเกี่ยวกับเรื่องนี้ (1) #ifndef BOOST_CONFIG_HPP (2) # include <boost/config.hpp> (3) #endif (4) # (5) #if defined(BOOST_HAS_PRAGMA_ONCE) (6) # pragma once (7) #endif ในบรรทัด 4 ไม่มีอะไรหลังจากเครื่องหมายปอนด์ สิ่งนี้มีผลกระทบอะไรบ้าง มันกำหนดไว้ในข้อมูลจำเพาะของ C preprocessor (CPP) หรือไม่ เนื่องจาก Boost เป็นไลบรารีข้ามแพลตฟอร์มฉันจะสมมติว่า CPP ใด ๆ ควรวิเคราะห์อย่างถูกต้อง เอฟเฟกต์ / ผลข้างเคียงของการมีสัญญาณปอนด์ / แฮชแบบสุ่มตลอดรหัสคืออะไร
145 c++  c  boost  c-preprocessor 


4
ทำไม pthread_cond_wait ถึงมีการปลุกที่ผิดพลาด?
ในการอ้างถึงหน้าคน: เมื่อใช้ตัวแปรเงื่อนไขจะมีเพรดิเคตของบูลีนที่เกี่ยวข้องกับตัวแปรที่แชร์ซึ่งเกี่ยวข้องกับแต่ละเงื่อนไขรอซึ่งเป็นจริงถ้าเธรดควรดำเนินการต่อ การปลุกที่เกิดขึ้นจริงจาก pthread_cond_timedwait () หรือฟังก์ชั่น pthread_cond_wait () อาจเกิดขึ้นได้ เนื่องจากการส่งคืนจาก pthread_cond_timedwait () หรือ pthread_cond_wait () ไม่ได้มีความหมายอะไรเกี่ยวกับมูลค่าของเพรดิเคตนี้เพรดิเคตควรได้รับการประเมินอีกครั้งเมื่อส่งคืนดังกล่าว ดังนั้นpthread_cond_waitสามารถส่งคืนแม้ว่าคุณจะไม่ได้ส่งสัญญาณ อย่างน้อยครั้งแรกที่ดูเหมือนว่าเลวร้าย มันจะเป็นฟังก์ชั่นที่สุ่มคืนค่าผิดหรือสุ่มคืนก่อนที่มันจะถึงคำสั่ง return ที่เหมาะสม ดูเหมือนว่าเป็นข้อบกพร่องที่สำคัญ แต่ความจริงที่ว่าพวกเขาเลือกที่จะจัดทำเอกสารนี้ในหน้าคนมากกว่าแก้ไขดูเหมือนว่าจะมีเหตุผลที่ถูกต้องว่าทำไมpthread_cond_waitตื่นขึ้นมาอย่างเก๊ สันนิษฐานว่ามีบางอย่างที่แท้จริงเกี่ยวกับวิธีการทำงานที่ทำให้ไม่สามารถช่วยเหลือได้ คำถามคืออะไร ทำไมไม่pthread_cond_waitกลับ spuriously? ทำไมถึงไม่สามารถรับประกันได้ว่าจะมีการปลุกเมื่อมีการส่งสัญญาณอย่างถูกต้องเท่านั้น ทุกคนสามารถอธิบายเหตุผลของพฤติกรรมหลอกลวงได้หรือไม่
145 c  pthreads 

9
วิธีการแสดงอาร์เรย์ที่จัดสรรแบบไดนามิกในดีบักเกอร์ Visual Studio
ถ้าคุณมีอาร์เรย์ที่ปันส่วนแบบคงที่ดีบัก Visual Studio สามารถแสดงองค์ประกอบอาร์เรย์ทั้งหมดได้อย่างง่ายดาย อย่างไรก็ตามหากคุณมีอาร์เรย์ที่จัดสรรแบบไดนามิกและชี้ไปที่ตัวชี้มันจะแสดงเฉพาะองค์ประกอบแรกของอาร์เรย์เมื่อคุณคลิก + เพื่อขยาย มีวิธีง่าย ๆ ในการบอกดีบักเกอร์แสดงข้อมูลนี้ให้ฉันเป็นอาร์เรย์ประเภท Foo และขนาด X หรือไม่


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