我试图不使用typedef而真正理解函数指针,但似乎无法理解。我不知道传递一个指向函数的指针所需要传达的签名。
#include <stdio.h>
void odd() { printf("odd!\n"); }
void even() { printf("even!\n"); }
void (*get_pfn(int i))()
{
return i % 2 == 0 ? &even : &odd;
}
__SIGNATURE__
{
return &get_pfn;
}
int main()
{
get_pfn_pfn()(1)();
get_pfn_pfn()(2)();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为了使这项工作,__SIGNATURE__必须做什么?
我很好奇 C/C++ 词法分析器和解析器如何协同工作。我知道解析器通常需要至少一个标记的前瞻。我的问题是,在生产编译器(例如 gcc 或 clang)中:
1)词法分析器是否先运行,对整个文件进行词法分析,然后让解析器生成 AST。这意味着词法分析器会生成一个标记列表。
或者
2) 词法分析器是否只生成一小部分足以让解析器完成其工作的标记。这意味着词法分析器和解析器轮流运行。
我绝对认为使用选项 1,因为像 C++ 这样的语言有时需要任意前瞻,因为语法不是上下文无关的,但这会占用大量内存。