Tôi có đoạn code sau đây trong một ++ tập tin C:Tôi nên khởi tạo đúng cấu trúc C từ C++ như thế nào?
#include <sys/socket.h>
// ...
void someFunc() {
struct msghdr msg = {0}; // <<< Uninitialized member here
}
Khi tôi biên dịch với g++
sử dụng -Wall -Wextra
, tôi nhận được cảnh báo:
error: missing initializer for member 'msghdr::msg_namelen'
...same for several other fields
Vấn đề của tôi là thế này: Tôi không thể dứt khoát khởi tạo tất cả các trường, bởi vì tôi không biết trường nào sẽ tồn tại (đa nền tảng) trong một số struct msghdr
. Cấu trúc không có hàm tạo mặc định vì nó là cấu trúc C. Tôi đã theo ấn tượng rằng hình thức = {0}
dẫn đến zero-khởi của tất cả các lĩnh vực (trong đó sẽ là tốt cho tôi), nhưng thông điệp g++
lỗi cho thấy không.
Tùy chọn của tôi ở đây là gì?
thể trùng lặp của [Tại sao trình biên dịch ném cảnh báo này: "thiếu initializer"? Không cấu trúc khởi tạo?] (Http://stackoverflow.com/questions/1538943/why-is-the-compiler-throwing-this-warning-missing-initializer-isnt-the-stru) – ergosys