在C,C ++中检测Windows或Linux

我正在编写一个跨平台程序。我希望这个程序可以在Windows和Linux上运行,所以对于两个平台,我有两个不同的代码段。如果操作系统是Windows,则我希望第一个代码段可以运行;如果是Linux,那么我要运行第二个代码段。

所以我写了下面的代码,但是在Windows和Linux上构建时都会出错。我该怎么解决?

#ifdef __unix__                    /* __unix__ is usually defined by compilers targeting Unix systems */

#define OS_Windows 0

#include <unistd.h>

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#elif defined(_WIN32) || defined(WIN32) /* _Win32 is usually defined by compilers targeting 32 or 64 bit Windows systems */

#define OS_Windows 1

#include <windows.h>

#include <stdio.h>

#include <tchar.h>

#define DIV 1048576

#define WIDTH 7

#endif

int main(int argc, char *argv[])

{

if(OS_Windows)

{

MEMORYSTATUSEX statex;

statex.dwLength = sizeof (statex);

GlobalMemoryStatusEx (&statex);

_tprintf (TEXT("There is %*ld %% of memory in use.\n"),

WIDTH, statex.dwMemoryLoad);

}

else if(!OS_Windows) // if OS is unix

{

char cmd[30];

int flag = 0;

FILE *fp;

char line[130];

int memTotal, memFree, memUsed;

flag=0;

memcpy (cmd,"\0",30);

sprintf(cmd,"free -t -m|grep Total");

fp = popen(cmd, "r");

while ( fgets( line, sizeof line, fp))

{

flag++;

sscanf(line,"%*s %d %d %d",&TotalMem, &TotalUsed, &TotalFree);

}

pclose(fp);

if(flag)

printf("TotalMem:%d -- TotalUsed:%d -- TotalFree:%d\n",TotalMem,TotalUsed,TotalFree);

else

printf("not found\n");

}

return 0;

}

回答:

通常是这样完成的(或多或少):

#ifdef _WIN32

#include <windows.h>

#include <stdio.h>

#include <tchar.h>

#define DIV 1048576

#define WIDTH 7

#endif

#ifdef linux

#include <unistd.h>

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#endif

int main(int argc, char *argv[])

{

#ifdef _WIN32

MEMORYSTATUSEX statex;

statex.dwLength = sizeof (statex);

GlobalMemoryStatusEx (&statex);

_tprintf (TEXT("There is %*ld %% of memory in use.\n"),

WIDTH, statex.dwMemoryLoad);

#endif

#ifdef linux

char cmd[30];

int flag = 0;

FILE *fp;

char line[130];

int TotalMem, TotalFree, TotalUsed;

flag=0;

memcpy (cmd,"\0",30);

sprintf(cmd,"free -t -m|grep Total");

fp = popen(cmd, "r");

while ( fgets( line, sizeof line, fp))

{

flag++;

sscanf(line,"%*s %d %d %d",&TotalMem, &TotalUsed, &TotalFree);

}

pclose(fp);

if(flag)

printf("TotalMem:%d -- TotalUsed:%d -- TotalFree:%d\n",TotalMem,TotalUsed,TotalFree);

else

printf("not found\n");

#endif

return 0;

}

这样,只有在Linux平台上才编译linux的代码,而只有Windows平台上才编译Windows的代码。

以上是 在C,C ++中检测Windows或Linux 的全部内容, 来源链接: utcz.com/qa/397420.html

回到顶部