sizeof() không hoạt động khi áp dụng cho bitfields:Có bit tương đương với sizeof() trong C không?
# cat p.c
#include<stdio.h>
int main(int argc, char **argv)
{
struct { unsigned int bitfield : 3; } s;
fprintf(stdout, "size=%d\n", sizeof(s.bitfield));
}
# gcc p.c -o p
p.c: In function ‘main’:
p.c:5: error: ‘sizeof’ applied to a bit-field
... rõ ràng, vì nó không thể trở về một điểm kích thước hoặc một cái gì đó một phần nổi. Tuy nhiên, nó đưa ra một câu hỏi thú vị. Có phải có tương đương, trong C, sẽ cho bạn biết số bit trong một biến/loại không? Lý tưởng nhất, nó cũng sẽ hoạt động với các loại thông thường, như char và int, ngoài các bitfield.
Cập nhật:
Nếu không có tương đương với ngôn ngữ của sizeof() cho bitfields, cách hiệu quả nhất tính nó là gì - trong thời gian chạy! Hãy tưởng tượng bạn có các vòng phụ thuộc vào điều này, và bạn không muốn chúng phá vỡ nếu bạn thay đổi kích thước của bitfield - và không gian lận công bằng và làm cho kích thước bitfield và chiều dài vòng lặp là một macro. ;-)
+1 tuyệt vời, không biết về CHAR_BIT. nếu bạn cần tính toán kích thước bitfield khi chạy? – eruciform
Điều đó là không thể (một trong những lý do tại sao mọi người tránh các trường bit). Một trình biên dịch có thể thực hiện điều này như là một phần mở rộng cho điều này, nhưng tôi chưa bao giờ nghe nói về một. – schot
@schot: byte! = Char. Trong C, char luôn luôn là 8 bit, do đó 'CHAR_BIT' luôn luôn là 8. Bất kể CPU/etc. Thời gian dài trước đây nó có thể đã khác nhau (liên tục tồn tại vì những lý do lịch sử) nhưng không còn nữa. Kiểm tra C99, 'limits.h'. – Dummy00001