質問はかなり簡単です。私は、呼び出しに、オペレーティングシステムの名前はどのようにして確認できますか?
"Windows" //or
"Unix"
何も空想のようなものをreturunする関数(C++)またはメソッドをしたいしたい、私はバージョンnumbeか何かを必要といけません。ちょうどOSの名前。私はここでこれを投稿すると思いました。
質問はかなり簡単です。私は、呼び出しに、オペレーティングシステムの名前はどのようにして確認できますか?
"Windows" //or
"Unix"
何も空想のようなものをreturunする関数(C++)またはメソッドをしたいしたい、私はバージョンnumbeか何かを必要といけません。ちょうどOSの名前。私はここでこれを投稿すると思いました。
すべてのオペレーティングシステムで動作する1つのバイナリファイルを持つことはできず、コードを再度コンパイルする必要があります。 MACROを使用しても問題ありません。そのようなあなたは、コンパイラのマニュアルを読んで、彼らはコンパイル時にOSを検出するために設けられたものをマクロ表示されるはずです。この
std::string getOsName()
{
#ifdef _WIN32
return "Windows 32-bit";
#elif _WIN64
return "Windows 64-bit";
#elif __unix || __unix__
return "Unix";
#elif __APPLE__ || __MACH__
return "Mac OSX";
#elif __linux__
return "Linux";
#elif __FreeBSD__
return "FreeBSD";
#else
return "Other";
#endif
}
よう
_WIN32
_WIN64
__unix
__unix__
__APPLE__
__MACH__
__linux__
__FreeBSD__
として
使用マクロ。ポコのソースコードから
私は、これが車輪を携帯不可能な方法で再発明しているので、私は下降しました。 –
@ H2CO3のC++コンパイラ/ OSでこれはコンパイルに失敗しますか?コード移植性は、OS上のコンパイラにコンパイルされた能力によって評価されないのですか? – MerickOWA
@MerickOWA "移植性のない方法で":M.Mが使用するマクロは、C言語でもC++標準でも定義されていません。 「ホイールを再考する」:標準ライブラリに存在する機能を複製します。 –
:
のWin32:
std::string EnvironmentImpl::osNameImpl()
{
OSVERSIONINFO vi;
vi.dwOSVersionInfoSize = sizeof(vi);
if (GetVersionEx(&vi) == 0) throw SystemException("Cannot get OS version information");
switch (vi.dwPlatformId)
{
case VER_PLATFORM_WIN32s:
return "Windows 3.x";
case VER_PLATFORM_WIN32_WINDOWS:
return vi.dwMinorVersion == 0 ? "Windows 95" : "Windows 98";
case VER_PLATFORM_WIN32_NT:
return "Windows NT";
default:
return "Unknown";
}
}
のUnix:
std::string EnvironmentImpl::osNameImpl()
{
struct utsname uts;
uname(&uts);
return uts.sysname;
}
すでに述べたように普遍的な解決策は、ありません。 Qtは正確にその理由のために 'QSysInfo'を追加しました。 – MSalters