Skip to content
Related Articles

Related Articles

How to detect Operating System through a C program
  • Last Updated : 19 Jul, 2020

One can find out the operating system on which the program is running with the help of C programming. This piece of information is very useful for the case where we want to build platform independent program. To find the OS (Operating System) we check out the macro defined by the compiler, for example windows with 32-bit OS has “_WIN32” as macro so if the macro is defined then the system we are working on is windows with 32-bit operating system. Similarly other OS has different macro defined. The list of macro for some popular OS are as follows:

Sr. No. Operating System Macro Present Notes
1. Windows 32-bit + 64-bit _WIN32 for all Windows OS
2. Windows 64 bit _WIN64 Only for 64 bit windows
3. Apple __APPLE__ For all Apple OS
4. Apple __MACH__ alternative to above
5. iOS embedded TARGET_OS_EMBEDDED include TargetConditionals.h
6. iOS simulator  TARGET_IPHONE_SIMULATOR  include TargetConditionals.h
7. iPhone TARGET_OS_IPHONE include TargetConditionals.h
8. MacOS TARGET_OS_MAC include TargetConditionals.h
9. Android __ANDROID__ subset of linux
10. Unix based OS __unix__
11. Linux __linux__ subset of unix
12. POSIX based _POSIX_VERSION Windows with Cygwin
13. Solaris __sun
14. HP UX __hpux
15. BSD BSD all BSD flavors
16. DragonFly BSD __DragonFly__
17. FreeBSD __FreeBSD__
18. NetBSD __NetBSD__
19. OpenBSD __OpenBSD__

Note:

It must be noted that the macros are valid for GNU GCC and G++ and may vary for other compilers.

Below is the program to detect which OS we are working on:

C

filter_none

edit
close

play_arrow

link
brightness_4
code

// C program to detect Operating System
  
#include <stdio.h>
  
// Driver Code
int main()
{
  
// Checking for windows OS with
// _WIN32 macro
#ifdef _WIN32
    printf("Hey Geek it seems that"
           "you are working on a Windows OS.\n");
  
// Checking for mac OS with
// __APPLE__ macro
#elif __APPLE__
    printf("Hey Geek it seems that you"
           "are working on a Mac OS.\n");
  
// Checking for linux OS with
// __linux__ macro
#elif __linux__
    printf("Hey Geek it seems that you"
           "are working on a Linux OS.\n");
  
// Checking for iOS embedded OS with
// TARGET_OS_EMBEDDED macro
#elif TARGET_OS_EMBEDDED
    printf("Hey Geek it seems that you"
           "are working on an iOS embedded OS.\n");
  
// Checking for iOS simulator OS with
// TARGET_IPHONE_SIMULATOR macro
#elif TARGET_IPHONE_SIMULATOR
    printf("Hey Geek it seems that you"
           "are working on an iOS simulator OS.\n");
  
// Checking for iPhone OS with
// TARGET_OS_IPHONE macro
#elif TARGET_OS_IPHONE
    printf("Hey Geek it seems that you"
           "are working on an iPhone OS.\n");
  
// Checking for MAC OS with
// TARGET_OS_MAC macro
#elif TARGET_OS_MAC
    printf("Hey Geek it seems that you"
           "are working on a MAC OS.\n");
  
// Checking for Android OS with
// __ANDROID__ macro
#elif__ANDROID__
    printf("Hey Geek it seems that you"
           "are working on an android OS.\n");
  
// Checking for unix OS with
// __unix__ macro
#elif __unix__
    printf("Hey Geek it seems that you"
           "are working on a unix OS.\n");
  
// Checking for POSIX based OS with
// _POSIX_VERSION macro
#elif _POSIX_VERSION
    printf("Hey Geek it seems that you"
           "are working on a POSIX based OS.\n");
  
// Checking for Solaris OS with
// __sun macro
#elif __sun
    printf("Hey Geek it seems that you"
           "are working on a Solaris OS.\n");
  
// Checking for HP UX OS with
// __hpux macro
#elif __hpux
    printf("Hey Geek it seems that you"
           "are working on a HP UX OS.\n");
  
// Checking for BSD OS with
// BSD macro
#elif BSD
    printf("Hey Geek it seems that you"
           "are working on a Solaris OS.\n");
  
// Checking for DragonFly BSD OS with
// __DragonFly__ macro
#elif __DragonFly__
    printf("Hey Geek it seems that you"
           "are working on a DragonFly BSD OS.\n");
  
// Checking for FreeBSD OS with
// __FreeBSD__ macro
#elif __FreeBSD__
    printf("Hey Geek it seems that you"
           "are working on a FreeBSD OS.\n");
  
// Checking for Net BSD OS with
// __NetBSD__ macro
#elif __NetBSD__
    printf("Hey Geek it seems that you"
           "are working on a Net BSD OS.\n");
  
// Checking for Open BSD OS with
// __OpenBSD__ macro
#elif __OpenBSD__
    printf("Hey Geek it seems that you"
           "are working on an Open BSD OS.\n");
  
// If neither of them is present
// then this is printed...
#else
    printf("Sorry, the system are"
           "not listed above.\n");
#endif
    return 0;
}

chevron_right



Output:
Below is the output of the above program on a Windows OS:

Similarly one can find out the operating system and can set the appropriate code for the system

Attention reader! Don’t stop learning now. Get hold of all the important CS Theory concepts for SDE interviews with the CS Theory Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up
Recommended Articles
Page :