2010-01-27 24 views
25

Ví dụ, chúng ta có một công đoànCông đoàn có thể được khởi tạo trong tuyên bố không?

typedef union { 
unsigned long U32; 
float f; 
}U_U32_F; 

Khi một biến kiểu liên minh này được công bố, có cách nào để thiết lập một giá trị ban đầu?

U_U32_F u = 0xffffffff; // Does not work...is there a correct syntax for this? 
+0

u32 là gì? ..... –

+0

@Prasoon Lời xin lỗi của tôi . Tôi đã có u32 typdef'ed nhưng không được hiển thị trong ví dụ. – semaj

Trả lời

29

Sử dụng một danh sách initializer:

U_U32_F u = { 0xffffffff }; 

Bạn có thể thiết lập các thành viên khác so với cái đầu tiên qua

U_U32_F u = { .f = 42.0 }; 
+14

Chỉ cần lưu ý rằng ví dụ thứ 2 là tính năng C99 không được tất cả các trình biên dịch hỗ trợ. –

3

Hãy thử U_U32_F u = {0xffffffff};

3

Lưu ý rằng mỗi thành viên công đoàn khởi doesn 't làm việc trên pre-C99 trình biên dịch, trong đó có một số depressing ra khỏi đó. Trình biên dịch Microsoft C hiện tại không hỗ trợ nó, ví dụ. (Tôi mơ hồ nhớ lại nó thậm chí không hỗ trợ khởi tạo thành viên đầu tiên, mà quay trở lại K & R II, nhưng tôi có thể sai về điều đó.)

+4

Microsoft ít nhiều bị bỏ rơi C và muốn bạn sử dụng C++ (hoặc thậm chí tốt hơn: C#); Tôi khá hài lòng với MinGW, giờ đây gcc-4.4 đã hết; trong tương lai, Clang/LLVM có thể là một sự thay thế khả thi nếu bạn đang tìm kiếm một trình biên dịch miễn phí – Christoph

+0

Trình biên dịch C của Microsoft không (và với kiến ​​thức của tôi không, cũng như không) phù hợp với bất kỳ tiêu chuẩn cụ thể nào. –

Các vấn đề liên quan