4 ms·
Of course inline assembly is C. Most languages don't let you do inline assembly. That isn't because they don't like it, but because the way those languages ge
by memefrog 3y ago
Of course inline assembly is C. Most languages don't let you do inline assembly. That isn't because they don't like it, but because the way those languages get translated to machine code is highly variable. C is the only language where the semantic model is simple enough that you can see how every language construct would translate to assembly language and write your own inline assembly language in between.
- pjmlp 3y agoIt definitely isn't. What page of C standard describes it? As for the rest of your comment, unless you are using a PDP-11, you will be surprised.
- memefrog 3y agoC predates the C standard, which describes a common subset of C implementations. It is useful for writing code which works across a variety of implementations. For example, you can write code that works on the Byzantine optimising compilers, which will attempt to render your code incorrectly if at all possible, but will make strictly conforming programs run very quickly. But it is not necessary to write code to the C standard, and many C implementations do not conform to it. The Plan9 C compiler, for example, expects 'void main(void)' for a program's main function, while the standard requires 'int main(void)'.
- pjmlp 3y agoLets make it easier then, what page of K&R C describes inline Assembly?
- memefrog 3y agoA book about C isn't a comprehensive guide to every C implementation.
- pjmlp 3y agoLikewise compiler specific extensions don't define universal truths about languages, that aren't part of the respective standard. Had you been clever, you would have pointed out that inline Assembly is defined in the ANSI C++ standard, with the mention of asm (content) language construct, leaving the meaning of content implementation defined. As it is also defined in the Ada language standard, Modula-2 standard revision, and Oakwood Guidelines for Oberon-2 implementation. That is the thing mixing up C with compiler specific features, confusing the language for its standard and assuming no other language in the planet offers similar capabilities.
- memefrog 3y agoI am not remotely interested in what the ISO standard says about C, and I am even less interested in what the ANSI standard says about C++, a completely different language. C is not defined by or constrained to the standard. It predates it and every implementation extends it, as is intended by the standard. The person confusing the standard with the language is you.
- defrost 3y agoThe more important detail is which "standard C" recognises inline asm as a common as dirt C extension. Page 514 (of version n1256) of the ISO C Standard Moving target, to be, sure, but it's been there for 20+ years now. Annex J.5.10 The asm keyword to quote a stack overflow answer (that sounds a lot like an answer commonly given back in the day on Usenet and #C IRC channels) informative, not normative, so an implementation need not provide inline assembly, and if it does it's not prescribed in which form. But it's a widespread extension, though not portable since compilers do indeed implement it differently. https://www.open-std.org/JTC1/SC22/WG14/ https://www.open-std.org/JTC1/SC22/WG14/ https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf