มาตรฐาน C - สภาพแวดล้อมที่โฮสต์
สำหรับสภาพแวดล้อมที่โฮสต์ (เป็นเรื่องปกติ) มาตรฐาน C11 (ISO / IEC 9899: 2011) กล่าวว่า:
5.1.2.2.1 การเริ่มต้นโปรแกรม
main
ฟังก์ชั่นที่เรียกว่าเมื่อเริ่มต้นโปรแกรมการตั้งชื่อ การใช้งานไม่ประกาศต้นแบบสำหรับฟังก์ชั่นนี้ มันจะถูกกำหนดด้วยประเภทผลตอบแทนint
และไม่มีพารามิเตอร์:
int main(void) { /* ... */ }
หรือมีพารามิเตอร์สองตัว (เรียกที่นี่ว่าargc
และargv
แม้ว่าอาจใช้ชื่อใดก็ได้เนื่องจากเป็นชื่อท้องถิ่นสำหรับฟังก์ชันที่มีการประกาศไว้):
int main(int argc, char *argv[]) { /* ... */ }
หรือเทียบเท่า; 10)หรือในลักษณะอื่น ๆ ที่กำหนดโดยการนำไปปฏิบัติ
หากมีการประกาศพารามิเตอร์ของฟังก์ชั่นหลักจะต้องปฏิบัติตามข้อ จำกัด ดังต่อไปนี้:
- ค่าของ
argc
จะไม่เป็นค่าลบ
argv[argc]
จะต้องเป็นตัวชี้โมฆะ
- หากค่า
argc
มากกว่าศูนย์สมาชิกอาเรย์argv[0]
ผ่านการ
argv[argc-1]
รวมจะต้องมีพอยน์เตอร์ไปยังสตริงซึ่งจะได้รับค่าที่กำหนดโดยการนำไปปฏิบัติโดยสภาพแวดล้อมของโฮสต์ก่อนที่จะเริ่มโปรแกรม จุดประสงค์คือเพื่อให้ข้อมูลโปรแกรมที่กำหนดก่อนการเริ่มต้นโปรแกรมจากที่อื่นในสภาพแวดล้อมที่โฮสต์ หากสภาพแวดล้อมโฮสต์ไม่สามารถจัดหาสตริงด้วยตัวอักษรในทั้งตัวพิมพ์ใหญ่และตัวพิมพ์เล็กการใช้งานต้องทำให้แน่ใจว่าได้รับสตริงเป็นตัวพิมพ์เล็ก
- หากค่า
argc
มากกว่าศูนย์สตริงที่ชี้ไปโดยจะargv[0]
แทนชื่อโปรแกรม argv[0][0]
จะต้องเป็นอักขระ null หากชื่อโปรแกรมไม่พร้อมใช้งานจากสภาพแวดล้อมโฮสต์ ถ้าค่าargc
มากกว่าหนึ่งสตริงที่ชี้ไปยังargv[1]
ผ่านจะargv[argc-1]
แทนพารามิเตอร์โปรแกรม
- พารามิเตอร์
argc
และargv
สายอักขระที่ชี้ไปยังargv
อาร์เรย์จะสามารถแก้ไขได้โดยโปรแกรมและรักษาค่าที่เก็บไว้ล่าสุดระหว่างการเริ่มต้นโปรแกรมและการยกเลิกโปรแกรม
10)ดังนั้นint
สามารถถูกแทนที่ด้วยชื่อ typedef ที่กำหนดเป็นint
หรือประเภทของargv
สามารถเขียนเป็น
char **argv
และอื่น ๆ
การยุติโปรแกรมใน C99 หรือ C11
ค่าที่ส่งคืนจากmain()
จะถูกส่งไปยัง 'สภาพแวดล้อม' ในวิธีที่กำหนดไว้ในการนำไปใช้
5.1.2.2.3 การยุติโปรแกรม
1 หากประเภทส่งคืนของmain
ฟังก์ชั่นเป็นประเภทที่เข้ากันได้กับint
การกลับมาจากการเรียกครั้งแรกไปยังmain
ฟังก์ชั่นเทียบเท่ากับการเรียกexit
ฟังก์ชั่นที่มีค่าส่งกลับโดยmain
ฟังก์ชั่นเป็นอาร์กิวเมนต์ 11) การเข้าถึงฟังก์ชัน}
ที่ยกเลิก
main
ฟังก์ชันส่งคืนค่า 0 หากชนิดส่งคืนไม่สามารถทำงานร่วมกันได้int
สถานะการยกเลิกที่ส่งคืนไปยังสภาพแวดล้อมโฮสต์จะไม่ได้รับการระบุ
11)ตาม 6.2.4 อายุการใช้งานของวัตถุที่มีระยะเวลาการจัดเก็บอัตโนมัติที่ประกาศไว้main
จะสิ้นสุดลงในกรณีก่อนหน้าแม้ว่าจะไม่ได้อยู่ในที่หลัง
โปรดทราบว่า0
ได้รับคำสั่งเป็น 'สำเร็จ' คุณสามารถใช้EXIT_FAILURE
และEXIT_SUCCESS
จาก<stdlib.h>
หากคุณต้องการ แต่มีการจัดตั้งเป็นอย่างดีและ 0 คือ 1 ดูรหัสทางออกที่มากกว่า 255 - เป็นไปได้หรือไม่ .
ใน C89 (และด้วยเหตุนี้ใน Microsoft C) ไม่มีคำสั่งเกี่ยวกับสิ่งที่เกิดขึ้นหากmain()
ฟังก์ชันส่งคืน แต่ไม่ได้ระบุค่าส่งคืน มันจึงนำไปสู่พฤติกรรมที่ไม่ได้กำหนด
7.22.4.4 exit
ฟังก์ชั่น
¶5ในที่สุดการควบคุมจะกลับสู่สภาพแวดล้อมของโฮสต์ หากค่าstatus
เป็นศูนย์หรือEXIT_SUCCESS
มีการส่งคืนฟอร์มที่กำหนดโดยการนำไปปฏิบัติของสถานะการยกเลิกที่สำเร็จ หากค่าของstatus
คือจะส่งคืนEXIT_FAILURE
แบบฟอร์มที่กำหนดโดยการนำไปปฏิบัติของสถานะการเลิกจ้างที่ไม่สำเร็จ มิฉะนั้นสถานะที่ส่งคืนจะถูกกำหนดโดยการนำไปปฏิบัติ
มาตรฐาน C ++ - สภาพแวดล้อมที่โฮสต์
มาตรฐาน C ++ 11 (ISO / IEC 14882: 2011) พูดว่า:
3.6.1 ฟังก์ชั่นหลัก [basic.start.main]
¶1โปรแกรมจะมีฟังก์ชั่นระดับโลกที่เรียกว่า main ซึ่งเป็นจุดเริ่มต้นที่กำหนดของโปรแกรม [ ... ]
¶2การดำเนินการจะต้องไม่กำหนดฟังก์ชันหลักไว้ล่วงหน้า ฟังก์ชั่นนี้จะต้องไม่โอเวอร์โหลด มันจะต้องมีชนิดผลตอบแทนประเภท int แต่มิฉะนั้นประเภทของมันคือการใช้งานที่กำหนดไว้ การใช้งานทั้งหมดจะต้องอนุญาตทั้งคำจำกัดความหลักดังต่อไปนี้:
int main() { /* ... */ }
และ
int main(int argc, char* argv[]) { /* ... */ }
ในรูปแบบหลังargc
จะเป็นจำนวนข้อโต้แย้งที่ส่งผ่านไปยังโปรแกรมจากสภาพแวดล้อมที่โปรแกรมจะทำงาน ถ้าargc
ไม่ใช่ศูนย์อาร์กิวเมนต์เหล่านี้จะถูกส่งargv[0]
ผ่านargv[argc-1]
เป็นพอยน์เตอร์สำหรับอักขระเริ่มต้นของสตริงหลายไบต์ที่สิ้นสุดด้วยค่า null (NTMBSs) (17.5.2.1.4.2) และargv[0]
จะเป็นตัวชี้ไปยังอักขระเริ่มต้นของ NTMBS ที่แสดงถึงชื่อที่ใช้ ""
เรียกใช้โปรแกรมหรือ ค่าของargc
จะไม่เป็นลบ ค่าของargv[argc]
จะเป็น 0 [หมายเหตุ: ขอแนะนำให้เพิ่มพารามิเตอร์เพิ่มเติม (ทางเลือก) ใด ๆ หลังจากargv
นั้น - บันทึกย่อ]
¶3 main
ไม่สามารถใช้ฟังก์ชั่นภายในโปรแกรม การเชื่อมโยง (3.5) ของmain
เป็นการนำไปปฏิบัติ [ ... ]
¶5คำสั่ง return ใน main มีผลต่อการออกจากฟังก์ชั่นหลัก (ทำลายวัตถุใด ๆ ที่มีระยะเวลาการเก็บข้อมูลอัตโนมัติ) และการเรียกstd::exit
ด้วยค่าตอบแทนเป็นอาร์กิวเมนต์ หากการควบคุมมาถึงจุดสิ้นสุดของ main โดยไม่พบคำสั่ง return ผลลัพธ์ที่ได้คือการเรียกใช้งาน
return 0;
มาตรฐาน C ++ บอกอย่างชัดเจนว่า "มัน [ฟังก์ชั่นหลัก] จะมีประเภทผลตอบแทนint
แต่มิฉะนั้นประเภทของมันคือการใช้งานที่กำหนดไว้" และต้องมีสองลายเซ็นเดียวกันกับมาตรฐาน C ที่จะได้รับการสนับสนุนเป็นตัวเลือก ดังนั้น 'void main ()' จึงไม่ได้รับอนุญาตโดยตรงจากมาตรฐาน C ++ แม้ว่าจะไม่มีสิ่งใดที่จะทำเพื่อหยุดการใช้งานที่ไม่ได้มาตรฐานเพื่อให้มีทางเลือกอื่น โปรดทราบว่า C ++ ห้ามผู้ใช้จากการโทรmain
(แต่มาตรฐาน C ไม่ได้)
มีย่อหน้าของ§18.5เป็นเริ่มต้นและการสิ้นสุดใน C ++ 11 มาตรฐานที่เป็นเหมือนวรรคจาก§7.22.4.4 ฟังก์ชั่นในมาตรฐาน C11 (ยกมาข้างต้น) นอกเหนือจากเชิงอรรถ (ซึ่งเอกสารเพียงว่าและจะมีการกำหนด ใน)exit
EXIT_SUCCESS
EXIT_FAILURE
<cstdlib>
มาตรฐาน C - ส่วนขยายทั่วไป
คลาสสิกระบบ Unix รองรับตัวแปรที่สาม:
int main(int argc, char **argv, char **envp) { ... }
อาร์กิวเมนต์ที่สามคือรายการพอยน์เตอร์ที่สิ้นสุดด้วย null ซึ่งแต่ละตัวเป็นตัวแปรสภาพแวดล้อมที่มีชื่อเครื่องหมายเท่ากับและค่า (อาจว่างเปล่า) หากคุณไม่ได้ใช้สิ่งนี้คุณยังสามารถเข้าถึงสภาพแวดล้อมผ่าน ' extern char **environ;
' ตัวแปรโกลบอลนี้เป็นค่าเฉพาะใน POSIX ซึ่งไม่มีส่วนหัวที่ประกาศ
สิ่งนี้ได้รับการยอมรับจากมาตรฐาน C ว่าเป็นส่วนขยายทั่วไปที่บันทึกไว้ในภาคผนวก J:
J.5.1 ข้อโต้แย้งด้านสิ่งแวดล้อม
¶1ในสภาพแวดล้อมที่โฮสต์ฟังก์ชั่นหลักจะได้รับอาร์กิวเมนต์ที่สามchar *envp[]
ซึ่งชี้ไปยังอาเรย์ปลายพอยน์เตอร์ที่สิ้นสุดด้วยค่าchar
แต่ละค่าซึ่งชี้ไปยังสตริงที่ให้ข้อมูลเกี่ยวกับสภาพแวดล้อมสำหรับการดำเนินการของโปรแกรมนี้ (5.1 2.2.1)
Microsoft C
Microsoft VS 2010คอมไพเลอร์เป็นที่น่าสนใจ เว็บไซต์บอกว่า:
ไวยากรณ์การประกาศสำหรับ main คือ
int main();
หรืออาจเลือก
int main(int argc, char *argv[], char *envp[]);
อีกทางเลือกหนึ่งฟังก์ชั่นmain
และwmain
สามารถประกาศเป็นคืนvoid
(ไม่มีค่าตอบแทน) หากคุณประกาศmain
หรือwmain
คืนค่าเป็นโมฆะคุณจะไม่สามารถส่งคืนรหัสทางออกให้กับกระบวนการหลักหรือระบบปฏิบัติการโดยใช้คำสั่ง return ในการส่งคืนรหัสออกเมื่อmain
หรือwmain
ประกาศว่าvoid
คุณต้องใช้exit
ฟังก์ชัน
มันไม่ชัดเจนสำหรับฉันว่าเกิดอะไรขึ้น (รหัสทางออกใดที่ส่งคืนไปยังพาเรนต์หรือระบบปฏิบัติการ) เมื่อโปรแกรมที่void main()
ออกไม่ทำงานและเว็บไซต์ MS ก็เงียบเช่นกัน
ที่น่าสนใจคือ MS ไม่ได้กำหนดเวอร์ชันสองข้อโต้แย้งของmain()
มาตรฐาน C และ C ++ ที่ต้องการ เพียงกำหนดรูปแบบอาร์กิวเมนต์สามแบบโดยที่อาร์กิวเมนต์ที่สามคือchar **envp
ตัวชี้ไปยังรายการของตัวแปรสภาพแวดล้อม
หน้า Microsoft ยังแสดงรายการทางเลือกอื่น ๆwmain()
ซึ่งใช้สายอักขระกว้างและอื่น ๆ
หน้า Microsoft Visual Studio 2005รุ่นนี้ไม่มีรายชื่อvoid main()
เป็นทางเลือก รุ่นจาก Microsoft Visual Studio 2008เป็นต้นไปทำ
มาตรฐาน C - สภาพแวดล้อมอิสระ
ตามที่ระบุไว้ก่อนหน้าข้อกำหนดด้านบนมีผลกับสภาพแวดล้อมที่โฮสต์ หากคุณกำลังทำงานกับสภาพแวดล้อมอิสระ (ซึ่งเป็นทางเลือกให้กับสภาพแวดล้อมที่โฮสต์) มาตรฐานนั้นมีน้อยกว่าที่จะพูด สำหรับสภาพแวดล้อมที่เป็นอิสระฟังก์ชันที่เรียกใช้เมื่อเริ่มต้นโปรแกรมไม่จำเป็นต้องถูกเรียกใช้main
และไม่มีข้อ จำกัด สำหรับชนิดส่งคืน มาตรฐานบอกว่า:
5.1.2 สภาพแวดล้อมในการดำเนินการ
มีการกำหนดสองสภาวะแวดล้อมการทำงาน: อิสระและโฮสต์ ในทั้งสองกรณีการเริ่มต้นโปรแกรมเกิดขึ้นเมื่อมีการเรียกใช้ฟังก์ชัน C ที่กำหนดโดยสภาพแวดล้อมการดำเนินการ วัตถุทั้งหมดที่มีระยะเวลาการจัดเก็บแบบคงที่จะต้องเริ่มต้น (ตั้งค่าเป็นค่าเริ่มต้น) ก่อนที่จะเริ่มโปรแกรม ลักษณะและระยะเวลาของการเริ่มต้นดังกล่าวไม่ได้ระบุไว้เป็นอย่างอื่น การยุติโปรแกรมส่งคืนการควบคุมสภาพแวดล้อมการดำเนินการ
5.1.2.1 สภาพแวดล้อมอิสระ
ในสภาพแวดล้อมที่เป็นอิสระ (ซึ่งการดำเนินการของโปรแกรม C อาจเกิดขึ้นโดยไม่ได้รับประโยชน์จากระบบปฏิบัติการ) ชื่อและประเภทของฟังก์ชั่นที่เรียกเมื่อเริ่มต้นโปรแกรมนั้นจะถูกกำหนดตามการนำไปใช้ สิ่งอำนวยความสะดวกของไลบรารีใด ๆ ที่พร้อมใช้งานสำหรับโปรแกรมอิสระนอกเหนือจากชุดขั้นต่ำที่กำหนดไว้ในข้อ 4 จะถูกกำหนดตามการนำไปใช้
ผลกระทบของการยกเลิกโปรแกรมในสภาพแวดล้อมอิสระนั้นกำหนดโดยการนำไปปฏิบัติ
การอ้างอิงโยงไปยังข้อ 4 ความสอดคล้องหมายถึงสิ่งนี้:
¶5 โปรแกรมที่สอดคล้องอย่างเคร่งครัดจะใช้เฉพาะคุณสมบัติเหล่านั้นของภาษาและห้องสมุดที่ระบุในมาตรฐานสากลนี้ 3)มันจะไม่ผลิตผลลัพธ์ขึ้นอยู่กับพฤติกรรมที่ไม่ได้กำหนดไม่ได้กำหนดหรือไม่ได้กำหนดไว้และจะต้องไม่เกินขีด จำกัด การปฏิบัติขั้นต่ำ
¶6ทั้งสองรูปแบบของการดำเนินงานตามนโยบายจะเป็นเจ้าภาพและอิสระ การใช้งานโฮสต์ที่สอดคล้องจะต้องยอมรับโปรแกรมใด ๆ ที่สอดคล้องกันอย่างเคร่งครัด การดำเนินงานตามนโยบายอิสระจะยอมรับโปรแกรมใด ๆ ตามนโยบายอย่างเคร่งครัดซึ่งในการใช้งานของคุณสมบัติที่ระบุไว้ในข้อห้องสมุด (ข้อ 7) ถูกกักขังอยู่ในเนื้อหาของส่วนหัวมาตรฐาน<float.h>
, <iso646.h>
, <limits.h>
, <stdalign.h>
,
<stdarg.h>
, <stdbool.h>
, <stddef.h>
, และ<stdint.h>
<stdnoreturn.h>
การใช้งานที่สอดคล้องกันอาจมีส่วนขยาย (รวมถึงฟังก์ชั่นห้องสมุดเพิ่มเติม) หากไม่ได้ปรับเปลี่ยนพฤติกรรมของโปรแกรมที่เข้ากันได้อย่างเคร่งครัด 4)
¶7 โปรแกรมที่สอดคล้องกันนั้นเป็นโปรแกรมที่เป็นที่ยอมรับในการใช้งานที่สอดคล้อง 5)
3)โปรแกรมที่สอดคล้องอย่างเคร่งครัดสามารถใช้คุณสมบัติตามเงื่อนไข (ดู 6.10.8.3) หากการใช้งานได้รับการปกป้องโดยคำสั่ง preprocessing การรวมตามเงื่อนไขที่เหมาะสมโดยใช้แมโครที่เกี่ยวข้อง ตัวอย่างเช่น:
#ifdef __STDC_IEC_559__ /* FE_UPWARD defined */
/* ... */
fesetround(FE_UPWARD);
/* ... */
#endif
4)นี่ก็หมายความว่าการดำเนินการที่สอดคล้องกันขอสงวนไม่มีตัวระบุอื่นนอกเหนือจากที่สงวนไว้อย่างชัดเจนในมาตรฐานสากลนี้
5)โปรแกรมที่สอดคล้องอย่างเคร่งครัดมีวัตถุประสงค์เพื่อให้สามารถพกพาได้มากที่สุดระหว่างการใช้งานที่สอดคล้องกัน โปรแกรมการปรับให้สอดคล้องอาจขึ้นอยู่กับคุณสมบัติที่ไม่สามารถพกพาได้ของการใช้งานที่สอดคล้อง
เป็นที่สังเกตได้ว่าส่วนหัวเดียวเท่านั้นที่ต้องการสภาพแวดล้อมอิสระที่กำหนดฟังก์ชั่นใด ๆ ที่เป็นจริง<stdarg.h>
(และแม้กระทั่งที่อาจเป็น - และมักจะ - แมโครเพียง)
มาตรฐาน C ++ - สภาพแวดล้อมอิสระ
เช่นเดียวกับที่มาตรฐาน C รู้จักทั้งสภาพแวดล้อมที่โฮสต์และอิสระดังนั้นมาตรฐาน C ++ ก็เช่นกัน (ราคาจาก ISO / IEC 14882: 2011)
1.4 การปฏิบัติตามการนำไปปฏิบัติ [intro.compliance]
¶7สองชนิดของการใช้งานจะมีการกำหนดที่: เจ้าภาพการดำเนินงานและการดำเนินงานอิสระ สำหรับการนำไปปฏิบัติที่โฮสต์มาตรฐานสากลนี้จะกำหนดชุดของห้องสมุดที่มีอยู่ การใช้งานอิสระเป็นสิ่งที่การดำเนินการอาจเกิดขึ้นโดยไม่ได้รับประโยชน์จากระบบปฏิบัติการและมีชุดของไลบรารีที่ใช้งานที่กำหนดไว้ซึ่งรวมถึงไลบรารีสนับสนุนภาษาบางอย่าง (17.6.1.3)
implementation8 การนำไปปฏิบัติที่สอดคล้องกันอาจมีส่วนขยาย (รวมถึงฟังก์ชั่นห้องสมุดเพิ่มเติม) โดยที่พวกเขาจะไม่เปลี่ยนแปลงพฤติกรรมของโปรแกรมที่มีรูปแบบที่เหมาะสม การใช้งานจำเป็นต้องมีการวินิจฉัยโปรแกรมที่ใช้ส่วนขยายที่ไม่ได้มาตรฐานตามมาตรฐานสากลนี้ อย่างไรก็ตามเมื่อเสร็จสิ้นแล้วพวกเขาสามารถรวบรวมและดำเนินการโปรแกรมดังกล่าวได้
implementation9 การนำไปปฏิบัติแต่ละครั้งจะต้องมีเอกสารประกอบที่ระบุโครงสร้างที่ได้รับการสนับสนุนตามเงื่อนไขทั้งหมดซึ่งไม่สนับสนุนและกำหนดลักษณะเฉพาะของสถานที่ทั้งหมด 3
3)เอกสารนี้ยังกำหนดพฤติกรรมการใช้งานที่กำหนดไว้; ดู 1.9
17.6.1.3 การติดตั้งอิสระ [การปฏิบัติตาม]
มีการกำหนดการใช้งานสองประเภท: โฮสต์และอิสระ (1.4) สำหรับการนำไปปฏิบัติที่โฮสต์มาตรฐานสากลนี้จะอธิบายชุดของส่วนหัวที่มีอยู่
การใช้งานอิสระมีชุดของส่วนหัวที่กำหนดไว้ ชุดนี้จะต้องมีอย่างน้อยส่วนหัวที่แสดงในตารางที่ 16
รุ่นที่จัดของส่วนหัว<cstdlib>
จะประกาศอย่างน้อยฟังก์ชั่นabort
, atexit
, at_quick_exit
, exit
และquick_exit
(18.5) ส่วนหัวอื่น ๆ ที่ระบุไว้ในตารางนี้จะต้องเป็นไปตามข้อกำหนดเช่นเดียวกับการใช้งานโฮสต์
ตารางที่ 16 - ส่วนหัว C ++ สำหรับการปรับใช้อิสระ
Subclause Header(s)
<ciso646>
18.2 Types <cstddef>
18.3 Implementation properties <cfloat> <limits> <climits>
18.4 Integer types <cstdint>
18.5 Start and termination <cstdlib>
18.6 Dynamic memory management <new>
18.7 Type identification <typeinfo>
18.8 Exception handling <exception>
18.9 Initializer lists <initializer_list>
18.10 Other runtime support <cstdalign> <cstdarg> <cstdbool>
20.9 Type traits <type_traits>
29 Atomics <atomic>
เกี่ยวกับการใช้int main()
ใน C?
§5.1.2.2.1มาตรฐานของ C11 แสดงให้เห็นมาตรฐานสัญกรณ์ที่ต้องการ - int main(void)
- แต่ก็ยังมีสองตัวอย่างในมาตรฐานที่แสดงint main()
: §6.5.3.4¶8และ§6.7.6.3¶20 ตอนนี้เป็นสิ่งสำคัญที่จะต้องทราบว่าตัวอย่างไม่ใช่ 'เชิงบรรทัดฐาน'; มันเป็นเพียงตัวอย่างเท่านั้น หากมีข้อบกพร่องในตัวอย่างพวกเขาจะไม่ส่งผลกระทบโดยตรงต่อข้อความหลักของมาตรฐาน ที่กล่าวว่าพวกเขาบ่งบอกอย่างมากถึงพฤติกรรมที่คาดหวังดังนั้นหากมาตรฐานรวมint main()
อยู่ในตัวอย่างมันแสดงให้เห็นint main()
ว่าไม่ได้รับอนุญาตแม้ว่ามันจะไม่ได้เป็นสัญลักษณ์ที่ต้องการ
6.5.3.4 sizeof
และ_Alignof
ตัวดำเนินการ
...
¶8ตัวอย่าง 3 ในตัวอย่างนี้ขนาดของอาร์เรย์ความยาวแปรผันถูกคำนวณและส่งคืนจากฟังก์ชัน:
#include <stddef.h>
size_t fsize3(int n)
{
char b[n+3]; // variable length array
return sizeof b; // execution time sizeof
}
int main()
{
size_t size;
size = fsize3(10); // fsize3 returns 13
return 0;
}