Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using macros WIN32 or _MSC_VER cross-platform

Tags:

c

I am compiling under Linux (GCC 4.4.2) and Windows VS C++ Express Edition 2008

I am currently compiling under Windows XP Pro 32 bit, and have added this to my source code.

#if defined( WIN32 )
/* Do windows stuff here */
#endif

However, the code in the if statement is disabled (grayed out). However if I do the following:

#if defined( _MSC_VER )
/* Do windows stuff here */
#endif

The if statement code is enabled.

I am just wondering, what should I be using. I have seen many programmers use WIN32. However, doesn't seem to work for me. Should I be using _MSC_VER instead?

Many thanks for any advice,

like image 935
ant2009 Avatar asked Feb 27 '10 16:02

ant2009


2 Answers

There is no WIN32. If you've seen it being used elsewhere, it's either wrong or the code is explicitly defining that macro itself somewhere.

You want _WIN32. See https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros for a list of predefined macros in Microsoft's compiler.

like image 144
jamesdlin Avatar answered Oct 19 '22 23:10

jamesdlin


This worked for me!

#if defined (_WIN32)
#define PLATFORM "Windows"
#elif defined (__linux)
#define PLATFORM "Linux"
#endif
#include <iostream>
using namespace std;

int main()
{
  cout << PLATFORM << "System" << endl;
  return 0;
}
like image 20
Ryan Mckenna Avatar answered Oct 19 '22 22:10

Ryan Mckenna