ไม่จำเป็นต้องใช้เครื่องหมายอัฒภาค (';') หลังจากการประกาศฟังก์ชันใน C ++ หรือไม่


174

ฉันเพิ่งทำแบบทดสอบการเขียนโปรแกรมระดับกลางและหนึ่งในคำถามที่ฉันผิดคือ:

ไม่จำเป็นต้องใช้เครื่องหมายอัฒภาค (';') หลังจากการประกาศฟังก์ชัน

จริงหรือเท็จ

ฉันเลือก "false" (และโปรดแก้ไขให้ฉันถ้าฉันผิดเพราะฉันรู้สึกว่าฉันกำลังบ้า) การประกาศฟังก์ชั่นคือสิ่งที่คุณเขียนก่อนคำจำกัดความ (ที่ด้านบนสุดของโค้ด) ดังนั้นคอมไพเลอร์จึงรู้หน้าที่ เรียกก่อนแม้แต่เรียกมันและนิยามฟังก์ชั่นเป็นสิ่งที่ทำให้ฟังก์ชั่นโดยรวม

กล่าวคือ

ประกาศ:

int func();

ความหมาย:

int func() {
  return 1;
}

คำตอบสำหรับเรื่องนี้ไม่ควรเป็นเท็จหรือ


41
คำจำกัดความยังเป็นการประกาศ แต่ฉันจะบอกว่าคำตอบของคุณถูกต้อง

216
มันเป็นคำถามที่ยากลำบากและไม่มีความสามารถในการเขียนโปรแกรมที่ดี
phonetagger

40
ฉันมักจะพบคำถามที่ทำให้เกิดผลกระทบเชิงลบสองครั้งทำให้เกิดความสับสน ในความคิดของฉันคำถามดังกล่าวได้รับการออกแบบมาเพื่อการเดินทางของนักเรียน ทำไมคำถามจึงไม่สามารถเกิดขึ้นได้ในวิธีต่อไปนี้: "เซมิโคลอน (';') จำเป็นต้องใช้เสมอหลังจากการประกาศฟังก์ชั่นจริงหรือเท็จ"? : /
Algirdas Preidžius

18
@phonetagger ความสับสนทั้งหมดนี้แสดงให้เห็นว่าคำพูดนั้นเป็นคำถามที่ไม่ดี
François Andrieux

34
มีดโกนของ Hanlonชี้ให้เห็นว่าผู้เขียนได้ทำการทดสอบแบบ "ประกาศ" และ "คำจำกัดความ"
Sneftel

คำตอบ:


161

คุณสามารถมีสถานการณ์ที่คุณประกาศและกำหนดฟังก์ชั่นในขั้นตอนเดียวเช่นถ้าคุณรวมคำจำกัดความของฟังก์ชั่น ณ จุดที่คุณประกาศ ในทางเทคนิคแล้วฉันคิดว่าถูกต้อง แต่คำถามนั้นถูกพูดในลักษณะที่ฉันจะได้ตอบในแบบที่คุณทำ


10
ฉันยืนยันว่าความจริงไม่ถูกต้องเนื่องจากเหตุผลที่คุณให้ หากมีกรณีที่จำเป็นต้องใช้เครื่องหมายอัฒภาคก็เป็นเท็จ (หรือไม่จริง) ความจริงเป็นสิ่งที่สมบูรณ์สำหรับฉันหากมีกรณีที่ชัดเจนเมื่อจำเป็นคุณไม่สามารถพูดความจริงได้
ฉัน Funball

16
@IFunball อาร์กิวเมนต์ที่ดี ภาษา natual โง่ ประโยค "อัฒภาค ( ';') ไม่จำเป็นต้องหลังจากการประกาศฟังก์ชั่น" สามารถอ่านได้ว่า "อัฒภาค ( ';') ไม่(เคย)ที่จำเป็นหลังจากที่มีการประกาศฟังก์ชัน" หรือเป็น "อัฒภาค ( ';' ) ไม่จำเป็น(เสมอ)หลังจากประกาศฟังก์ชั่น " ไม่ว่าจะมีคุณสมบัติคำสั่งเป็นบานพับจริงหรือเท็จในการเลือกการตีความ คำถามที่พูดอย่างเคร่งครัดนั้นไม่ชัดเจนและด้วยเหตุนี้จึงไม่มีคำตอบที่ชัดเจน
Peter - Reinstate Monica

6
@IFunball เป็นเพราะ "การประกาศ" ซึ่งไม่มีบริบทเพิ่มเติมและไม่มีคำสั่งใด ๆ ว่าเราเป็นผู้ดำเนินการด้านกฎหมายซึ่งเป็นที่เข้าใจกันโดยทั่วไปว่าหมายถึง "การประกาศที่ไม่มีการกำหนด" คำถามนั้นไม่ยุติธรรม
การแข่งขัน Lightness ใน Orbit

2
คำถามสอบใด ๆ ที่ไม่ชัดเจนสำหรับคนที่รู้ว่าเนื้อหาที่กำลังถูกทดสอบนั้นมีข้อบกพร่อง
Nat

2
ดูเหมือนว่าเราจำเป็นต้องเพิ่มประโยคพฤติกรรมที่ไม่ได้กำหนดไว้ในภาษาอังกฤษ
Nick Mertin

147

นอกเหนือจากสิ่ง "คำจำกัดความยังเป็นการประกาศ" สิ่งต่อไปนี้คือกฎหมาย C ++:

int f(), g();

นี่เป็นการประกาศสองฟังก์ชันfและgทั้งสองอย่างไม่มีอาร์กิวเมนต์และด้วยชนิดส่งคืนของintแต่นิยามของfอัฒภาคไม่ได้ถูกติดตาม (ทันที) เช่นเดียวกันนี่เป็นสิ่งถูกกฎหมาย:

int f(), i = 42;

แต่มันไม่ได้รับอนุญาตให้ละเว้นเครื่องหมายอัฒภาคโดยสิ้นเชิงในกรณีเหล่านี้ดังนั้นจึงค่อนข้างน่าแปลกใจถ้าทั้งคู่ถูกนำมาเป็นตัวอย่างของการประกาศโดยไม่มีเครื่องหมายอัฒภาคต่อไปนี้ ในความเป็นจริงแล้วสิ่งต่อไปนี้ผิดกฎหมาย:

void *p, f() {}

อื่น ๆ กว่า (เพียง) ประกาศฟังก์ชั่นฟังก์ชั่นความหมายไม่สามารถใช้ร่วมกับการประกาศอื่น ๆ หรือความหมายเดียวกันชนิดระบุ (หากสิ่งนี้ถูกกฎหมายมันจะนิยามทั้ง a void *pและ a void f() {}.)

ไม่ว่าในกรณีใดก็ตามนี่เป็นคำถามประเภท "gotcha" ที่ไม่ควรอยู่ในการทดสอบการเขียนโปรแกรมระดับกลาง

(โอ้โปรดอย่าเขียนโค้ดเหมือนจริง ๆint f(), i = 42;)


2
เป็นไปได้ที่จะใช้ typedef เพื่อกำหนดประเภทฟังก์ชั่นแล้วใช้มันเพื่อประกาศฟังก์ชั่นมากมายในคราวเดียวเช่นtypedef int fooProc(int); fooProc a,b.c.d.e;ฉันไม่แน่ใจว่าทำไมส่วนหัวมาตรฐานสำหรับคอมไพเลอร์ที่ใช้ฟลอปปี้ไดรฟ์ไม่ได้ทำแบบนั้น วันเนื่องจากฉันคิดว่ามันจะอนุญาตให้ไฟล์ส่วนหัวมีขนาดเล็กลงและประมวลผลได้เร็วขึ้น
supercat

ให้พิจารณาด้วยว่าint f(int(&g)(),int(*h)()){return g()+h();}นี่มีการประกาศฟังก์ชั่นสามรายการซึ่งหนึ่งในนั้นจะตามด้วยวงเล็บปีกกาเปิดแบบเปิดอีกเครื่องหมายคอมม่าและอีกอันหนึ่งเป็นวงเล็บปิด
David Hammen

1
@DavidHammen: นั่นไม่ได้เคร่งครัดประกาศฟังก์ชั่นอื่น ๆ int f(stuff)กว่า แม้จะอยู่ในขอบเขตของฟังก์ชั่นที่gเป็นตัวแปรอัตโนมัติของประเภทการอ้างอิงถึงฟังก์ชั่นและhเป็นตัวชี้ไปยังฟังก์ชั่น
Peter Cordes

83

คำตอบและความคิดเห็นอื่น ๆ เรียกร้องหลายวิธีว่านี่เป็นคำถามที่น่าสยดสยองทำให้เข้าใจผิดและไม่ดี แต่มีปัญหาอื่นที่ยังไม่มีใครระบุได้ คำถามคือ:

ไม่จำเป็นต้องใช้เครื่องหมายอัฒภาค (';') หลังจากการประกาศฟังก์ชัน จริงหรือเท็จ

ตกลงมาดูการประกาศฟังก์ชั่น:

int func();       /* */
/*           ^       */
/*           |       */
/* That whitespace is "after the function declaration". */

นั่นคือการประกาศทั้งหมด ประกาศไม่ได้int func()แล้วตามด้วย ;การประกาศคือint func();และจากนั้นตามด้วยช่องว่าง

ดังนั้นคำถามคือ: จำเป็นต้องใช้เครื่องหมายอัฒภาคหลังจากการประกาศหรือไม่ ไม่แน่นอน การประกาศมีเซมิโคลอนอยู่แล้วซึ่งสิ้นสุดแล้ว อัฒภาคหลังจากการประกาศจะไม่มีจุดหมาย ในทางตรงกันข้ามint func(); ;จะเป็นอัฒภาคหลังจากการประกาศฟังก์ชัน

คำถามนี้ตั้งใจจะถามคำถาม "จริงหรือเท็จ: โทเค็นสุดท้ายในการประกาศฟังก์ชั่นมักจะเป็นเครื่องหมายอัฒภาคเสมอ" แต่นั่นไม่ใช่คำถามที่พวกเขาเขียนเพราะผู้เขียนคำถามไม่ได้คิดอย่างชัดเจนเกี่ยวกับปัญหา

คำแนะนำของฉันคือหลีกเลี่ยงการทดสอบภาษาแบบทดสอบทั้งหมด พวกเขาน่ากลัวมาก


สนุกจริงในขณะที่เราอยู่ในหัวข้อ ใน C # สิ่งเหล่านี้ถูกกฎหมายทั้งหมด:

class C {}
class D {};
struct E {}
struct F {};

ใน C # การประกาศคลาสหรือโครงสร้างอาจสิ้นสุดในเซมิโคลอนหรือไม่ขึ้นอยู่กับดุลยพินิจของคุณ ฟีเจอร์เล็ก ๆ น้อย ๆ ที่แปลกใหม่นี้ถูกเพิ่มเข้ามาเพื่อประโยชน์ของโปรแกรมเมอร์ C / C ++ ที่มาถึง C # ซึ่งอยู่ในปลายนิ้วของพวกเขาที่การประกาศประเภทสิ้นสุดในเซมิโคลอนไร้จุดหมาย; ทีมออกแบบไม่ต้องการลงโทษพวกเขาเพราะมีนิสัยแบบนี้ :-)


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
Samuel Liew

25

คุณสามารถประกาศฟังก์ชั่นเช่นนี้ได้เช่นกัน:

int func(){
    return 1;
}

คำสั่งนั้นคลุมเครือมาก คำตอบที่ถูกต้องควรขึ้นอยู่กับว่าคุณประกาศฟังก์ชันอย่างไร

อย่างไรก็ตามฉันก็เลือกผิดด้วยและบางทีคุณอาจรายงานคำถามให้ใครซักคน


3
อย่างไรก็ตามอย่าวางสิ่งนี้ไว้ในระดับส่วนบุคคล สิ่งสำคัญคือคุณเข้าใจว่าการประกาศฟังก์ชั่นการทำงานจึงไม่ต้องกังวลเกี่ยวกับมันมากเกินไปเพียงแค่ให้แน่ใจว่าคำถามจะได้รับการตรวจสอบอย่างน้อยและไปต่อ
Luca Corsini

11
อย่างแน่นอน สุจริตฉันเรียนรู้เพิ่มเติมเกี่ยวกับการประกาศฟังก์ชั่น - คำนิยามจากการทำให้คำถามผิดไปกว่าที่ฉันจะได้รับมันถูกต้อง
โลแกน

1
@Logan ไม่ต้องกังวลมากเกินไป หากคุณรู้วิธีการเขียนและอ่านฟังก์ชั่นนั่นคือทั้งหมดที่คุณต้องการ โดยส่วนตัวแล้วฉันเกลียดคำถามประเภทนี้ที่ 1. ไม่ได้กำหนดไว้อย่างดี 2. ทดสอบความรู้ทางทฤษฎีของคุณเกี่ยวกับไวยากรณ์ สำหรับฉันมันเหมือนความจำของกล้ามเนื้อ เมื่อฉันเขียนตัวเลขแต่ละตัวไปที่ปุ่มอย่างง่ายดายมันก็ควรจะไป แต่ถ้าคุณให้ฉันทดสอบเกี่ยวกับสิ่งที่ปุ่มควรกดหลักฉันจะสิ้นหวังอย่างสมบูรณ์โดยไม่ต้องใช้แป้นพิมพ์เพื่อดำเนินการทางร่างกาย ...
bolov

2
... การเขียนไวยากรณ์ทั่วไป (เช่นฟังก์ชั่น) จะกลายเป็นเรื่องที่สองสำหรับคุณ และเมื่อคุณจะทำมันเลอะเพราะคุณเพิ่งเปลี่ยนภาษาดี ... Intellisense และการเน้นไวยากรณ์สร้างขึ้นเพื่อการแก้ปัญหาที่รวดเร็วและมีประสิทธิภาพ ลงทุนเวลาและพลังงานในสิ่งที่มีประโยชน์มากขึ้น
bolov

20

ไม่จำเป็นต้องใช้เครื่องหมายอัฒภาค (';') หลังจากการประกาศฟังก์ชัน

จริงหรือเท็จ

จริง อัฒภาคไม่จำเป็นต้องมีหลังจากการประกาศใด ๆ หรือหลังจากคำจำกัดความใด ๆ หรือหลังจากคำสั่งใด ๆ

การประกาศหลายประเภทต้องลงท้ายด้วยเครื่องหมายอัฒภาคตามที่ระบุไว้ในส่วนที่ 7 [dcl.dcl] ไวยากรณ์ แต่ไม่จำเป็นต้องเขียนอันที่สองหลังจากนั้น


1
ฉันเห็นว่า Eric Lippert แย้งกับประเด็นนี้แล้ว ฉันเดาว่า upvotes ทั้งหมดทำให้ฉันมองข้าม รู้สึกฟรีเพื่อลงคะแนนของคุณที่นั่น
Marc van Leeuwen

ค่อนข้างคำถามใด ๆ ที่ถามว่า "X เสมอจริง: จริงหรือเท็จ?" กำลังจะมีคำตอบ "เท็จ" Heck ไม่มีความจำเป็นที่จะมีอัฒภาคใดก็ได้ ; คอมไพเลอร์อาจบ่นและปฏิเสธที่จะรวบรวมโปรแกรมของคุณ แต่แทบจะไม่ถึงจุดสิ้นสุดของโลก ฉันจะไม่เรียกว่าพื้นฐานความต้องการ ;)
Quuxplusone

@Quuxplusone หากคอมไพเลอร์ปฏิเสธโปรแกรมของคุณโปรแกรมของคุณไม่มีการประกาศฟังก์ชั่นใด ๆ ในนั้น :)
Ben Millwood

6

ขึ้นอยู่กับว่าเราจะประกาศหรือกำหนดฟังก์ชัน หากเราประกาศฟังก์ชันเราต้องรวมเครื่องหมายอัฒภาค ( ;) และหากเรากำหนดฟังก์ชันนั้นไม่จำเป็นต้องใช้เครื่องหมายอัฒภาค

การประกาศเป็นเช่นนี้:

int add(int, int);

และคำจำกัดความเป็นเช่นนี้

int add(int a, int b)
{
    // ...
}

10
ปัญหาเกี่ยวกับคำตอบนี้คือมันแสดงให้เห็นว่าคำจำกัดความและการประกาศเป็นเอกสิทธิ์เฉพาะบุคคลร่วมกัน ในความเป็นจริงทุกคำจำกัดความเป็นการประกาศ; คำจำกัดความเป็นส่วนย่อยของการประกาศ
MSalters

6

แม้ว่าฉันจะเห็นด้วยกับคำตอบอื่น ๆ เกือบทั้งหมดโดยระบุว่าคำถามนั้นเป็นคำที่คลุมเครือมากและคำตอบของคุณนั้นถูกต้องทางเทคนิค

นี่คือวิธีที่ฉันเรียกพวกเขาเสมอ:

void func();  // The function prototype

...

void func()
{
    // The function definition
}

ฉันสมมติว่าคำถามนั้นประกอบขึ้นด้วยคำศัพท์ในใจ

คำจำกัดความและการประกาศเป็นทั้งแนวคิดเดียวกันในสายตาของฉัน "ฉันกำหนด x = y" == "ฉันประกาศ x = y"

แต่แน่นอนว่ามันมีความแตกต่างอย่างมากระหว่างต้นแบบฟังก์ชั่น (ด้านบน) และคำจำกัดความที่แท้จริงของฟังก์ชั่น


สำหรับฉันต้นแบบของคุณคือการประกาศตามวิธีที่ฉันเรียนรู้ (ไม่ได้บอกว่าคุณผิดทั้ง) แต่จากนั้นฉันก็คาดหวังว่าต้นแบบจะระบุจำนวนและประเภทของการขัดแย้งหรือเป็นโมฆะ แต่ฉันคาดหวังว่าคุณจะละเว้น เพื่อความกะทัดรัด
David S

เดวิดเอส: ใช่แน่นอนว่ามันจะมีจำนวนและประเภทของข้อโต้แย้ง แต่ฉันไม่เห็นด้วยเพราะความกะทัดรัด (โปรดทราบว่าไม่มีข้อโต้แย้งในการประกาศฟังก์ชันจริง) อย่างไรก็ตามฉันไม่เห็นด้วยจริง ๆ เมื่อคุณพูดว่าการประกาศฟังก์ชั่นเต็มรูปแบบเรียกว่าต้นแบบ ฉันอ้างถึงวิกิพีเดีย: "ฟังก์ชั่นต้นแบบหรือฟังก์ชั่นอินเทอร์เฟซเป็นการประกาศฟังก์ชั่นที่ระบุชื่อของฟังก์ชั่นและประเภทลายเซ็น (arity, ชนิดข้อมูลของพารามิเตอร์และประเภทผลตอบแทน) แต่ไม่รวมเนื้อหาของฟังก์ชัน"
Opifex

@DavidS: ใน C ++, ฟังก์ชั่นการประกาศอยู่เสมอต้นแบบ (หรือคำจำกัดความ) และเป็นสิ่งที่เทียบเท่ากับvoid func(); void func(void);นี่คือความแตกต่างจากCที่void func();ไม่ได้บอกอะไรเกี่ยวกับคอมไพเลอร์ args void func(void);และไม่ได้เป็นสิ่งเดียวกับ ต้นแบบภายหลังหรือคำจำกัดความเป็นความคิดที่ดีมิฉะนั้นผู้เรียกจะต้องใช้การเลื่อน ARG เริ่มต้น (เช่น float -> double และชนิดจำนวนเต็มแคบถึงintกฎเดียวกันกับ args กับฟังก์ชัน
Peter Cordes

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

6

เป็นคำถามที่น่าเสียดายที่คุณไม่ได้พูดว่า "หลังจาก" ตัวอย่างเช่นเราสามารถเขียนสิ่งนี้:

int func()  /* My function */ ;

หรือฉันสามารถเขียน:

int func()
int a = 42;

ในกรณีแรกเครื่องหมายอัฒภาคไม่ได้อยู่หลังการประกาศโดยตรงแต่ก็ถือว่าใช้ได้

ในกรณีที่สองจะมีเครื่องหมายอัฒภาค "หลัง" การประกาศ แต่ไม่ใช่หลัง

ผมคิดว่าเอริค Lippert มีความคิดที่ถูกต้องในคำตอบของเขา

มันเหมือนกับการพูดว่า "ควรจะมีช่วงเวลาหลังจากสิ้นสุดประโยคในภาษาอังกฤษหรือไม่" เนื้อหาประโยคมีระยะเวลาสิ้นสุดแล้ว (ไม่อย่างนั้นมันจะไม่ใช่ประโยค) และดังนั้นจึงไม่ควรมีจุดหลังจากประโยค ..


4
ดี จบประโยคด้วยระยะเวลาพิเศษ ฉันรู้ว่าคุณทำอะไรที่นั่น.
David S

2
int func() int a=42;ไม่ได้รวบรวม คุณต้องใช้เครื่องหมายจุลภาคไม่ใช่อีกintรายการ ดูคำตอบของ @ Arne โพสต์ในหนึ่งวันก่อนหน้านี้ สิ่งใหม่ในคำตอบนี้คือย่อหน้าสุดท้ายที่มีความคล้ายคลึงกับประโยคภาษาอังกฤษ
Peter Cordes

1
ฉันไม่ได้พูดตัวอย่างที่สองที่คอมไพล์แล้ว ฉันกำลังชี้ให้เห็นว่าการบอกว่าจำเป็นต้องใช้เครื่องหมายอัฒภาค "หลังจาก" การประกาศนั้นไม่ชัดเจน ตัวอย่างของฉันมีเครื่องหมายอัฒภาคหลังจากการประกาศ แต่ไม่ได้รวบรวม
Nick Gammon

1
ปัญหาเดียวกันนี้เกิดขึ้นในข้อความแสดงข้อผิดพลาด; ตัวอย่างที่โปรดปรานจาก C # คือ " พารามิเตอร์พารามิเตอร์ต้องเป็นพารามิเตอร์สุดท้ายในรายการพารามิเตอร์ที่เป็นทางการ " ทีนี้สมมุติว่าฉันพูดว่า "กบต้องเป็นตัวสุดท้ายที่อยู่ในบัญชีกลุ่ม" สิ่งนี้หมายความว่า (1) รายการ gloob ทุกอันมี Frob หนึ่งใบที่สิ้นสุดเช่นเดียวกับทุกคำถามที่มีเครื่องหมายคำถามหนึ่งใบที่ท้าย (2) รายการ Gloob สามารถมีกบจำนวนเท่าใดก็ได้ แต่ถ้ามีกบหนึ่งตัวหรือมากกว่านั้น รายการสุดท้ายจะต้องเป็น frob เช่นเดียวกับตัวเลขที่สามารถมีจำนวนใด ๆ ของ 02468 แต่หนึ่งในนั้นจะต้องเป็นครั้งสุดท้ายหรือ ...
Eric Lippert

... (3) รายการ gloob อาจมีศูนย์หรือกบหนึ่งตัวและถ้ามีหนึ่งรายการมันจะมาถึงจุดสิ้นสุดหรือไม่ หากคุณไม่ทราบบริบทฉันคิดว่า (1) เป็นคำอธิบายที่สมเหตุสมผลที่สุด แต่ในกรณีของ "พารามิเตอร์พารามิเตอร์" (3) เป็นคำอธิบายที่ถูกต้อง คำอธิบายที่ไม่เป็นทางการจำนวนมากขององค์ประกอบภาษาการเขียนโปรแกรมมีคุณสมบัติที่เพื่อนบรรณาธิการด้านเทคนิคของฉันเรียกว่า "COIK" - ชัดเจนเฉพาะในกรณีที่ทราบ หากคุณยังไม่เข้าใจเนื้อหาอย่างละเอียดคำอธิบายของมันไม่มีประโยชน์สำหรับคุณ แต่ถ้าคุณเข้าใจอย่างถี่ถ้วนแล้วคุณไม่ต้องการคำอธิบาย!
Eric Lippert


4

เป็นคำถามที่ยุ่งยาก แต่พวกเขาใช้คำประกาศซึ่งมีความหมายเช่นนี้:

int example();

ดังนั้นจึงเป็นจริงในกรณีนี้

หากพวกเขาใช้คำว่าการนำไปปฏิบัติมันก็จะผิด


2

เซมิโคลอน (;) ใช้เพื่อบอกคอมไพเลอร์ว่าหลังจากเซมิโคลอนนี้ (;) คำสั่งใหม่จะเริ่มขึ้น

ดังนั้นฉันคิดว่าต้องใช้เครื่องหมายอัฒภาค (;) ในระหว่างการประกาศฟังก์ชันเท่านั้น ดังนั้นตามฉันคำตอบจะเป็นจริง


การประกาศไม่ใช่ข้อความ
HolyBlackCat

แต่หลังจากประกาศฟังก์ชั่นเรากำลังดำเนินการบรรทัดใหม่ของรหัสโดยใช้คอมไพเลอร์ ดังนั้นฉันคิดว่าก่อนที่จะดำเนินการบรรทัดใหม่ของคอมไพเลอร์รหัสต้องรู้ที่บรรทัดของรหัสก่อนหน้าจะจบลงเท่านั้นจากนั้นคอมไพเลอร์สามารถสร้างรหัสพื้นเมือง (เช่น 0101)
Jatinder

2

เมื่อฟังก์ชั่นถูกกำหนดไว้ก่อน main () :

  • ไม่จำเป็นต้องใช้เครื่องหมายอัฒภาคเนื่องจากฟังก์ชันกำหนดไว้แล้ว

เมื่อฟังก์ชั่นถูกกำหนดหลังจาก main () :

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