Tôi đã xem GCC docs để xác định macro và có vẻ như những gì tôi muốn là không thể, nhưng tôi đoán nếu có, ai đó ở đây sẽ biết.Có thể xác định macro giống chức năng với một thân biến?
Những gì tôi muốn làm là xác định macro này:
synchronized(x) {
do_thing();
}
nào mở rộng để:
{
pthread_mutex_lock(&x);
do_thing();
pthread_mutex_unlock(&x);
}
Trong C++ Tôi chỉ có thể làm cho một đối tượng SynchronizedBlock
mà được các khóa trong constructor và mở khóa của nó trong destructor, nhưng tôi không có ý tưởng làm thế nào để làm điều đó trong C.
Tôi nhận ra tôi có thể sử dụng một con trỏ hàm trong biểu mẫu synchronized(x, &myfunction);
, nhưng của tôi mục đích là làm cho một số mã C trông giống Java nhiều nhất có thể. Và vâng, tôi biết đây là điều ác.
Bạn thực sự nên suy nghĩ kỹ trước khi cố gắng làm cho một ngôn ngữ trông giống như ngôn ngữ khác. Một macro trông giống như cú pháp bạn đang yêu cầu sẽ vô cùng khó hiểu đối với người đọc nó dưới dạng C. –
R. đúng là điều này có thể khiến mọi thứ trở nên khó đọc, vì không dễ dàng thấy được rằng đây là một macro. Tôi nghĩ điều tốt nhất là tuân thủ quy ước rằng các macro phải là chữ hoa và tên đó phải thực sự mang tính thông tin. Tôi sẽ đi cho một cái gì đó như 'MUTUALY_EXCLUDE' hoặc như vậy. –
^'Và có, tôi biết đây là điều ác. ' –