1.Hàm không trả về void: là luôn k có return, và có printf
2. hàm int là hàm trả về luôn có return , k có printf
Mong mn chỉnh sửa góp ý giúp ý kiến của em ạ
Hỏi về kiểu trả về hàm trong C
- Lệnh return sẽ rời hàm lập tức nên
void
hay không void đều dùng được. - Nhập xuất như
printf
không để chung với hàm tính toán, chứ trả về int vẫn có thể là mã lỗi.
Có vẻ bạn hiểu chưa đúng về kiểu trả về của hàm.
Bạn dùng hàm trả về khi bạn muốn hàm làm một việc gì đó, sau đó trả lại kết quả nào đó, hàm trả về bắt buộc phải có return
. Hàm trả về không nhất thiết là int, nó có thể trả về bất cứ kiểu dữ liệu đã được định nghĩa nào, ví dụ một số hàm trả về: String sayHello()
, bool isGreaterThanTen(int number)
,…
Bạn dùng hàm không trả về khi muốn nó làm thôi, không cần trả lại cái gì.
Ví dụ bạn muốn 1 hàm cộng 2 số với nhau:
- Hàm trả về: cộng 2 số a, b với nhau, in ra kết quả và lưu kết quả vào biến c:
int add(int a, int b) {
int result = a + b;
printf("%d",result)
return result;
}
int c = add(2, 4);
- Hàm không trả về: cộng 2 số a, b với nhau và in ra kết quả:
void add(int a, int b) {
printf("%d", a + b);
}
Lưu ý, hàm void vẫn dùng return được, khi đó, nó sẽ dừng hàm tại vị trí có dòng return.
Ví dụ:
void add(int a, int b) {
printf("%d", a + b);
return;
printf("Dòng này sẽ không được in ra");
}
Mình lâu rồi không dùng C nên có thể có sai sót, ai phát hiện ra lỗi hãy chỉ giúp mình :3
Dòng này lỗi vì đối số 1 là format string hay
"%d"
.
Oh, cảm ơn bạn :v chả dùng C mấy nên có sai sót. Vậy sửa thành printf("%d", a+b);
nhỉ.
ý 2 mình chưa hiểu ý bạn lắm
void add(int a, int b) {
printf("%d", a + b);
return;
printf("Dòng này sẽ không được in ra");
}
#Bạn ơi chỗ này của bạnthì dòng cuối mà như thế thì viết có tác dụng gì nhỉ. vì nó k làm được gì
và void là return , còn int thì return 1 số cụ thể fai không
Trong void có printf. để khi vào hàm chính mình dùng và nó in ra. Thì nghĩa là có trả?
- Chỗ này thì đúng là nó không có tác dụng gì thật, mình lấy ví dụ để chứng minh hàm void cũng dùng
return
được. - Đúng.
- Bạn hiểu chưa đúng rồi. Hàm printf nó thực hiện công việc in ra màn hình, nó không trả về cái gì cả. Khi hàm muốn trả về cái gì, phải sử dụng
return
.
Bổ sung ví dụ về return
ở giữa trong void:
void div(int a, int b){
if (b==0) {
printf("Error: b should not be zero");
return;
}
printf("%d", a/b);
}
Hàm void
mặc định là có thể bỏ return
vì dư thừa, nhưng lúc code có thể gặp 1 số tình huống Exception như trên thì có thể kết thúc hàm sớm.
Của bạn ý vẫn giống cái này fai k /
void div(int a, int b){
if (b==0)
printf("Error: b should not be zero");
else printf("%d", a/b);
return;
}
Wew, nhìn output thì thực ra là giống nhau. Nhưng mục đích hoàn toàn khác nhau.
Người ta có 1 kiểu code style như thế này:
void processEvent(int a, int b, int c){
if (a & FLAG_ERROR){
printf("Error input. End here.");
return;
}
if (b & FLAG_SYSTEM_BUSY) {
printf("System is busy. Call later.");
return;
}
// Process event c here
printf("Begin process");
...
printf("Process ended successfully");
}
return
ở đây đánh dấu việc chương trình hoặc hàm kết thúc vì có lỗi bất thường, hoặc không thỏa điều kiện nào đó và không tiếp tục xử lý phần việc chính.
Còn trong ví dụ của bạn, việc return ở cuối hàm void là hơi thừa.
Thông thường thì chương trình nên return error code
hơn là chỉ return;
không như trên. Nhưng mình lấy ví dụ để hiểu cách sử dụng return;
hữu dụng hơn.