You don't know shit. Regardless of what features you use, every compiler generates a grammar tree and syntax tree based on its own internal format, before it is converted into ASM and then assembled to native machine code. C and C++ in modern compilers become equivalent once that transliteration is begun. Not using C++ features changes nothing, it is still converted to the same internal format for the production of machine code. So whether or not you specify your code as C or C++ doesn't matter, the only difference to the compiler is some functional linkage specs when pushing arguments onto the stack. The code in the example is correct by both C/C++ standards as well as all modern compiler specs. You amateurs shouldn't argue facts that you don't know. ASM is not a scripting language. It is a textual representation of machine code. C# does not support inline assembly. A DLL can be injected into a process regardless of it's internal format. Whether or not a DLL can be executed properly IS dependent on it's internal format. A DLL that contains only managed code (C#, VB.NET, F#, etc...) must be injected, and loaded onto a runtime host inside the target process.