sách gpt4 ai đã đi

Định nghĩa của SIG_IGN, SIG_DFL, SIG_ERR

In lại Tác giả: IT Prince Thời gian cập nhật: 2023-10-29 01:26:02 30 4
mua khóa gpt4 Nike

hiện hữuCác định nghĩa sau đây được đưa ra:

#define SIG_ERR (void (*)())-1

#define SIG_DFL (void (*)())0

#define SIG_IGN (void (*)())1

Tôi nghĩvô hiệu (*)()Chỉ ra rằng đó là một con trỏ hàm có kiểu trả về là void và tham số là void (vì không có gì giữa dấu ngoặc đơn).

Nhưng trongtín hiệu()Hàm, loại tham số thứ hai làvoid (*func)(int) .

Vậy, tại sao định nghĩa của ba điều trênvô hiệu (*)() .Ngoài ra, số -1 Điều này có nghĩa là gì? 0 1Theo định nghĩa thì sao?

Làm thế nào để hiểu những định nghĩa này?

1 Câu trả lời

Định nghĩa của bạn khác với tôi. Nếu tôi xử lý trước tệp sau:

#include 
SIG_IGN
SIG_DFL
SIG_ERR

3 dòng cuối cùng trong đầu ra của bộ xử lý trước là

% gcc -E sigtest.c|đuôi -n3
((__người thở dài_t) 1)
((__người giữ cửa_t) 0)
((__sighandler_t) -1)

Định nghĩa kiểu là

typedef __signalfn_t *__sighandler_t;

kiểu dữ liệu void __signalfn_t(int);

Từ asm-generic/signal-defs.h. Vậy thì bạn hẳn phải có một số danh hiệu cũ.

Tuy nhiên, đây không phải là C++, mà là C. Dấu ngoặc rỗng trong C có nghĩa là tham số hàm không được khai báo/hàm có thể nhận bất kỳ số lượng tham số nào. Điều này được coi là lỗi thời kể từ tiêu chuẩn C89. Tuy nhiên,vô hiệu (*)() Các giá trị của kiểu sẽ là khoảng trống (*)(int) tương thích.


Các giá trị -1, 0 và 1 là các hằng số ma thuật không thể di chuyển và chỉ có ý nghĩa đối với hạt nhân Linux.

Liên quan đến định nghĩa của c - SIG_IGN, SIG_DFL, SIG_ERR, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/35828466/

30 4 0
Bài viết được đề xuất: Sử dụng phần ".init_array" của tệp ELF
Bài viết được đề xuất: git - Đồng bộ hóa TFS và GIT
Bài viết được đề xuất: Cách gán tên trường của một struct từ một biến
Bài viết được đề xuất: Khởi tạo thứ tự trong một gói
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com