3 ms·
I'm guessing it is not compatible with calling conventions in C, but one could goto a function name.
by astrobe_ 6y ago
I'm guessing it is not compatible with calling conventions in C, but one could goto a function name.
- chriszhang 6y agoCan you explain "goto a function name" further? I wrote this: #include <stdio.h> void f() { printf("f"); } int main() { goto f; return 0; } It creates error: foo.c:8:10: error: use of undeclared label 'f' goto f; ^ 1 error generated. How can we goto a function name?
- uryga 6y agoi think GP means that conceptually, you could imagine goto-ing to a function's code - they do compile to labels after all. fun note: C-- has something like that! iirc it's like calling a function, but reusing the current stackframe: jump f(expr1,. . .,exprn); > "the `jump` statement performs a control jump but carrying parameters. It has as target [...] a procedure address and can optionally transfer arguments to that procedure." https://www.microsoft.com/en-us/research/wp-content/uploads/1998/01/pal-manual.pdf https://www.microsoft.com/en-us/research/wp-content/uploads/...
- piscisaureus 6y agoThis is the first time I've heard about a language called C--, thank you for that. The concept is not so unique as you might think tho; the more commonly used term is "tail call".
- uryga 6y agoi always thought "tail call" means a function call that can be optimized in this way (located in a tail position), not the act of call-by-jumping itself. both uses make sense though re: C--, i think it's mostly used as a compiler IR. (notably in Haskell's GHC)