Question: Why isn't C/C++ called platform independent like java when the same source code written in C/C++ can be made to run on different operating systems by different compilers, just like JVM is used in java.

Isn't different compilers and JVM doing same thing and achieving platform independence.

Answer: 
> 
> Isn't different compilers and JVM doing same thing and achieving platform independence.
> 
> 
> 

Not really. Your Java program is running *within* the JVM, which acts as a translation layer between the Java byte code and the native machine code. It *hides* the platform-specific details from the Java application code.

This is not the case with C. C code (typically) runs natively, so there is no translation layer isolating it from platform-specific details. Your C code can be directly affected by platform-specific differences (word sizes, type representations, byte order, etc.).

A *strictly conforming* C program, which uses nothing outside of the standard library and makes no assumptions about type sizes or representation beyond the minimums guaranteed by the language standard, should exhibit the same behavior on any platform for which it is compiled. All you need to do is recompile it for the target platform.

The problem is that most useful real-world C and C++ code *isn't* strictly conforming; to do almost anything interesting you have to rely on third-party and system-specific libraries and utilities, and as soon as you do you lose that platform independence. I *could* write a command-line tool manipulates files in the local file system that would run on Windows and MacOS and Linux and VMS and MPE; all I would need to do is recompile it for the different targets. However, if I wanted to write something GUI-driven, or something that communicated over a network, or something that had to navigate the file system, or anything like that, then I'm reliant on system-specific tools and I *can't* just rebuild the code on different platforms.
> 
> Isn't different compilers and JVM doing same thing and achieving platform independence.
> 
> 
> 

The JVM per se is the platform. It is abstracting away, whether it is ARM/AMD64/...

C/C++ is getting compiled. It may only run on the processor(family) that it was compiled for.
You can't just take a binary for MIPS and execute it on ARM.

Compare it:

```
[C(++)]
  |
  v
[Processor]

```

vs

```
[Java (Classfiles)]
     |
     v
   [JVM] #Abstraction layer
     |
     v
[Processor]

```