在大学编程竞赛中提出了以下问题.我们被要求猜测输出和/或解释它的工作原理.不用说,我们都没有成功.
main(_){write(read(0,&_,1)&&main());}
Run Code Online (Sandbox Code Playgroud)
一些简短的谷歌搜索引导我到这个确切的问题,问codegolf.stackexchange.com:
https://codegolf.stackexchange.com/a/1336/4085
在那里,它解释了它的作用:Reverse stdin and place on stdout但不是如何.
我也在这个问题上找到了一些帮助:主要的三个论点,以及其他混淆的技巧,
但它仍然没有解释如何main(_),&_并且&&main()有效.
我的问题是,这些语法如何工作?它们是我应该知道的,因为它们仍然相关吗?
如果不是直接的答案,我会感激任何指针(资源链接等).
可能重复:
表示C中的动态类型
我的计算历史课程的一位教授深入研究了明显的类型或类型推断的语言,并且普遍赞扬了潜在类型语言的伟大性(更快的开发时间,动态系统等等).
同一天,在Automata Class,另一位教授说:
通过添加更多方法来执行相同的操作,动态类型使事情变得更加复杂.
我一生中大部分时间都在使用静态类型语言:C/C++/Java - 我唯一接触过的是Shell Coding和Ren'Py.
我的问题是,我可以在C中编写一个简单的程序来实现两者的一些好处吗?
例如,我可以创建Unions来接受所有用户驱动的数据,如下所示:
typedef union {
int int_type;
char char_type;
//and so on
} dynamic;
// Var Creation :
dynamic data;
// For unknown return type
void* function(dynamic data);
Run Code Online (Sandbox Code Playgroud)
我意识到联盟可能会危及类型安全,但这就是我在这里要做的事情.我还能采取什么其他方法?我只想尝试示威.
我试着回答这个问题.但老实说,我无法密切关注这些论点.
如果这个问题看起来很愚蠢,我道歉.
PS
使用下面的建议,我写了这个:http://codepad.org/A9JAX8lD,它基本上没有什么动态,但至少是一个开始.
我想我看到了我的两位教授都想说的话.
我最近在这里找到了这个定理,(在底部):
Any program can be transformed into a semantically equivalent program of one procedure containing one switch statement inside a while loop.
文章继续说:
A corollary to this theorem is that any program can be rewritten into a program consisting of a single recursive function containing only conditional statements
我的问题是,这些定理今天都适用吗?同样改变计划是否会获得任何好处?我的意思是说,这样的代码是否经过优化?(虽然递归调用较慢,但我知道)
我从这里开始读到,在编译器优化后,开关案例几乎总是更快.这有什么区别吗.?
PS:我试图从这里了解编译器优化
我添加了c标签,因为这是我见过的唯一一种优化的语言.