Thắc mắc "hàm void" nhưng lại phải return

Chào anh chị, em là sinh viên năm nhất đang học nhập môn hệ điều hành đến đoạn lập trình với thread, thầy có gửi một đoạn code để tụi em tham khảo, tuy nhiên khi chạy thử thì visual báo lỗi ở hàm void rằng “control reaches end of non-void function”. Em thử thêm return 0 vào hàm void thì mới biên dịch được. Em hơi thắc mắc về void * khác void chỗ nào và tại sao phải return ạ.

#include <pthread.h> 
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
void *thr1(void *ar)
{
	printf("This is thread %d\n", *((int *)ar));
	sleep(2);
}

int main(int argc, char *argv[])
{
	int i;
	int num = atoi(argv[1]);
	pthread_t tid[num];
	for (i = 0; i < num; i++)
	{
		pthread_create(&tid[i], NULL, thr1, (void *)&tid[i]);
	}
	return 0;
}

Kiểu trả về đang là void* kìa bạn :smiley:

void *thr1(void* ar)
4 Likes

ý em hỏi kiểu trả về void * có ý nghĩa như nào và trong trường hợp trên thì e return 0 có ảnh hưởng gì không ạ, trong giáo trình cũng không có return nhưng ko có thì nó không dịch được. Cảm ơn câu trả lời ạ.

Chắc code đó viết theo chuẩn C89 đó. Theo C89, đối với non-void function thì không cần phải có return. Nếu có return thì trả về giá trị theo sau từ khoá return, nếu không có thì trả về 1 giá trị rác (garbage value).

Đối với C99, kể cả C++, non-void function bắt buộc phải dùng từ khoá return.


void foo()void *bar() khác nha, thêm 1 kí tự * khác ý nghĩa hoàn toàn, foo() là void function, còn bar() là non-void function có return type là void*

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?