diff --git a/src/MeoAssistant/AsstConf.h b/src/MeoAssistant/AsstConf.h index f7822435ba..50cf2d957e 100644 --- a/src/MeoAssistant/AsstConf.h +++ b/src/MeoAssistant/AsstConf.h @@ -31,3 +31,20 @@ ASST_DO_PRAGMA(GCC diagnostic pop) #define ASST_SUPPRESS_CV_WARNINGS_START #define ASST_SUPPRESS_CV_WARNINGS_END #endif + +#ifdef __GNUC__ +#define ASST_AUTO_DEDUCED_ZERO_INIT_START \ +ASST_DO_PRAGMA(GCC diagnostic push) \ +ASST_DO_PRAGMA(GCC diagnostic ignored "-Wmissing-field-initializers") +#define ASST_AUTO_DEDUCED_ZERO_INIT_END \ +ASST_DO_PRAGMA(GCC diagnostic pop) +#elif defined(__clang__) +#define ASST_AUTO_DEDUCED_ZERO_INIT_START \ +ASST_DO_PRAGMA(clang diagnostic push) \ +ASST_DO_PRAGMA(clang diagnostic ignored "-Wmissing-field-initializers") +#define ASST_AUTO_DEDUCED_ZERO_INIT_END \ +ASST_DO_PRAGMA(clang diagnostic pop) +#else +#define ASST_AUTO_DEDUCED_ZERO_INIT_START +#define ASST_AUTO_DEDUCED_ZERO_INIT_END +#endif diff --git a/src/MeoAssistant/AsstUtils.hpp b/src/MeoAssistant/AsstUtils.hpp index 8328770d88..45c42dd6e9 100644 --- a/src/MeoAssistant/AsstUtils.hpp +++ b/src/MeoAssistant/AsstUtils.hpp @@ -1,5 +1,7 @@ #pragma once +#include "AsstConf.h" + #include #include #include @@ -201,15 +203,9 @@ namespace asst::utils auto pipe_buffer = std::make_unique(PipeBuffSize); #ifdef _WIN32 - -#ifdef __GNUC__ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wmissing-field-initializers" -#endif + ASST_AUTO_DEDUCED_ZERO_INIT_START SECURITY_ATTRIBUTES pipe_sec_attr = { 0 }; -#ifdef __GNUC__ -#pragma GCC diagnostic pop -#endif + ASST_AUTO_DEDUCED_ZERO_INIT_END pipe_sec_attr.nLength = sizeof(SECURITY_ATTRIBUTES); pipe_sec_attr.lpSecurityDescriptor = nullptr; pipe_sec_attr.bInheritHandle = TRUE; @@ -217,28 +213,18 @@ namespace asst::utils HANDLE pipe_child_write = nullptr; CreatePipe(&pipe_read, &pipe_child_write, &pipe_sec_attr, PipeBuffSize); -#ifdef __GNUC__ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wmissing-field-initializers" -#endif + ASST_AUTO_DEDUCED_ZERO_INIT_START STARTUPINFOA si = { 0 }; -#ifdef __GNUC__ -#pragma GCC diagnostic pop -#endif + ASST_AUTO_DEDUCED_ZERO_INIT_END si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESTDHANDLES; si.wShowWindow = SW_HIDE; si.hStdOutput = pipe_child_write; si.hStdError = pipe_child_write; -#ifdef __GNUC__ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wmissing-field-initializers" -#endif + ASST_AUTO_DEDUCED_ZERO_INIT_START PROCESS_INFORMATION pi = { nullptr }; -#ifdef __GNUC__ -#pragma GCC diagnostic pop -#endif + ASST_AUTO_DEDUCED_ZERO_INIT_END BOOL p_ret = CreateProcessA(nullptr, const_cast(cmdline.c_str()), nullptr, nullptr, TRUE, CREATE_NO_WINDOW, nullptr, nullptr, &si, &pi); if (p_ret) { diff --git a/src/MeoAssistant/Controller.cpp b/src/MeoAssistant/Controller.cpp index 30f3574b25..61db6eb5d0 100644 --- a/src/MeoAssistant/Controller.cpp +++ b/src/MeoAssistant/Controller.cpp @@ -1,3 +1,4 @@ +#include "AsstConf.h" #include "Controller.h" #ifdef _WIN32 @@ -261,14 +262,9 @@ std::optional> asst::Controller::call_command(const std::stri #ifdef _WIN32 -#ifdef __GNUC__ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wmissing-field-initializers" -#endif + ASST_AUTO_DEDUCED_ZERO_INIT_START PROCESS_INFORMATION process_info = { nullptr }; // 进程信息结构体 -#ifdef __GNUC__ -#pragma GCC diagnostic pop -#endif + ASST_AUTO_DEDUCED_ZERO_INIT_END BOOL create_ret = CreateProcessA(nullptr, const_cast(cmd.c_str()), nullptr, nullptr, TRUE, CREATE_NO_WINDOW, nullptr, nullptr, &m_child_startup_info, &process_info); if (!create_ret) { diff --git a/src/MeoAssistant/Controller.h b/src/MeoAssistant/Controller.h index 2344e2c8f8..81a096acc6 100644 --- a/src/MeoAssistant/Controller.h +++ b/src/MeoAssistant/Controller.h @@ -1,5 +1,7 @@ #pragma once +#include "AsstConf.h" + #include #include #include @@ -101,19 +103,14 @@ namespace asst HANDLE m_pipe_child_read = nullptr; // 子进程的读管道句柄 HANDLE m_pipe_child_write = nullptr; // 子进程的写管道句柄 -#ifdef __GNUC__ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wmissing-field-initializers" -#endif + ASST_AUTO_DEDUCED_ZERO_INIT_START SECURITY_ATTRIBUTES m_pipe_sec_attr = { 0 }; // 管道安全描述符 STARTUPINFOA m_child_startup_info = { 0 }; // 子进程启动信息 WSADATA m_wsa_data = { 0 }; SOCKET m_server_sock = 0ULL; sockaddr_in m_server_addr = { 0 }; -#ifdef __GNUC__ -#pragma GCC diagnostic pop -#endif + ASST_AUTO_DEDUCED_ZERO_INIT_END #else constexpr static int PIPE_READ = 0;