Tôi đang viết một chương trình nền tảng chéo. Tôi muốn chương trình này chạy dưới cả Windows và Linux, vì vậy tôi có hai phân đoạn mã khác nhau cho hai nền tảng. Nếu hệ điều hành là Windows, tôi muốn đoạn mã đầu tiên chạy; nếu là Linux, thì tôi muốn đoạn mã thứ hai chạy.Phát hiện Windows hoặc Linux trong C, C++
Vì vậy, tôi đã viết mã sau, nhưng nó gặp lỗi trong khi xây dựng cả trên Windows và Linux. Tôi nên làm gì để giải quyết nó?
#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;
}
Những loại lỗi? –
Và lỗi là? .. – kan
trên linux của nó nhận được lỗi :: âMEMORYSTATUSEXâ đã không được khai báo trong phạm vi này, â 're' không được khai báo trong phạm vi này và trong cửa sổ :: lỗi C3861: 'popen': không tìm thấy định danh ... tương tự như thế này .... whay để làm gì? – Ronin