我正在运行一个函数,其中我接受了一个信号的字符串文字,即"SIGINT“。但是,我需要将其转换为宏SIGINT的值。在不执行一系列if语句的情况下,是否可以做到这一点?
uint8_t sigNumber = 0;
if(name =="SIGINT") {
sigNumber = SIGINT;
} else if (...)发布于 2020-10-07 04:39:24
使用std:c++latest的Visual Studio 2019:
// #include <csignal>
#define SIGINT 2 // interrupt
#define SIGILL 4 // illegal instruction - invalid function image
#define SIGFPE 8 // floating point exception
#define SIGSEGV 11 // segment violation
#define SIGTERM 15 // Software termination signal from kill
#define SIGBREAK 21 // Ctrl-Break sequence
#define SIGABRT 22 // abnormal termination triggered by abort call
constexpr
std::pair<int, std::string_view> sig_mapping [] {
{SIGINT, "SIGINT"},
{SIGILL, "SIGILL"},
{SIGFPE, "SIGFPE"},
{SIGSEGV, "SIGSEGV"},
{SIGTERM, "SIGTERM"},
{SIGBREAK, "SIGBREAK"},
{SIGABRT, "SIGABRT"},
};
template<int SIZE>
constexpr
int StringToValue( const char (&STR) [SIZE] )
{
for( auto &&i : sig_mapping ) {
if( i.second == STR ) return i.first;
}
return 0;
}
int main()
{
constexpr auto
sigunknown { StringToValue("UNKNOWN") },
sigint { StringToValue("SIGINT") },
sigill { StringToValue("SIGILL") },
sigfpe { StringToValue("SIGFPE") },
sigsegv { StringToValue("SIGSEGV") },
sigterm { StringToValue("SIGTERM") },
sigbreak { StringToValue("SIGBREAK") },
sigabort { StringToValue("SIGABRT") }
;
return 0;
}https://stackoverflow.com/questions/64232756
复制相似问题