Tag: 编译器构造

符号表解析后的人口; 编译器构建

创建解析树后,我现在必须填充符号表。 我必须存储信息 标识符的类型,范围,偏移等。 现在我怎么知道标识符的类型和范围,因为我所知道的是该特定ID的词位值和行号(在词法分析之后)。 我如何得到整个事情。 谢谢。

“for(;;)”无限循环的习惯用法是否正确归因于PDP-11 C编译器?

最近我发现这篇文章声称喜欢for(;;) over while(1)无限循环的想法之所以出现,是因为最初在PDP-11上可用的C编译器为while(1)生成了额外的机器指令。 顺便说一句,即使是Visual C ++警告也倾向于前者 。 这种for(;;)成语的归属是多么现实?

主要编译器/工具链中C99支持的状态是什么?

对我在这里做出的评论的回应让我停下来思考:“我真的不知道C99支持的状态是什么。” 维基百科提供了一些编译器的详细信息,但我对C99不太熟悉,无法了解标准的所有部分内容,因此我正在寻找格式塔概述的问题答案: 主要编译器/工具链中C99支持的状态是什么?

使用gcc,严格包含C99符号,特别是不包括POSIX

经过多年的编程,我正在修课。 我的导师没有使用POSIX机器,最近我因在作业中使用indexfunction而受到惩罚。 我做了一些研究,我注意到虽然index是AT&T Unix的早期部分,并且符合POSIX标准,但它不是C99标准的一部分。 我希望gcc帮我找到类似符号的用法 。 我正在使用gcc 4.2( 不是 llvm)在OSX上编译 我的第一站研究涉及注意我的string.h文件在下面的特征测试宏检查中包装index的原型: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 经过一番挖掘,我发现了这个(在我的/usr/include/sys/cdefs.h ): /* STRICT Defining _POSIX_C_SOURCE or _XOPEN_SOURCE restricts the * available APIs to exactly the set of APIs defined by the * corresponding standard, based on the value defined. * * A correct, portable definition for _POSIX_C_SOURCE is 200112L. […]

使用Sethi-Ullman算法的表达式代码生成器

给一个AST树 ,我想生成一个类似汇编的语言。 我正在尝试使用Sethi-Ullman算法,但我在算法实现中有一些问题。 我用完寄存器后该怎么办? 目前我做以下事情: 发出一个push REG ,其中REG是右子树的寄存器,评估左子树,得到一个自由寄存器指定为右子树的寄存器,然后发出POP REG操作,其中REG也是右子树的寄存器。 我该如何实现该function以获得免费注册? 目前我正在使用这样的实现而不是基于堆栈: enum Reg { Reg_r0, Reg_r1 }; Reg regs[] = { Reg_r0, Reg_r1 }; Reg getreg() { static int c; if(c == sizeof(regs) / sizeof(int)) c = 0; return regs[c++]; } 这是一个伪代码(来自C语言)如何从我unsertood(包括label()函数)实现它 // K is the number of registers available int K = 2; void […]

在编译的C或C ++代码中加密密码

我知道如何在终端中使用GCC和CC编译C和C ++源文件,但是我想知道在编译后是否可以安全地将密码包含在这些文件中。 例如..我检查用户输入的某个密码,例如123,但看起来编译的C / C ++程序可以被反编译。 无论如何编译一个C / C ++源文件,同时保持源完全隐藏..如果没有,任何人都可以提供加密输入的小例子,然后检查密码,例如:(SHA1,MD5)

我在哪里可以找到C90和C99的显式语法?

我正在寻找一个小的C编译器,我似乎无法在任何地方找到C99的语法。 我找到了C90和C99标准文档,但我无法在任何地方找到语法。

“char”和“small int”比“int”慢吗?

可能重复: 内置类型的性能:char vs short vs int vs. float vs. double 你好。 假设您有32位处理器。 8位char和16位short int类型是否比本机32位int慢? 那么使用64位long long int呢? 默认情况下硬件是否支持此数据类型,或者通过使用其他指令将它们全部转换为32位数据? 如果我必须存储少量的字符,将它们存储为整数是不是更快?

我应该禁用C编译器签名/未签名的不匹配警告吗?

当您尝试比较两个变量时,Microsoft C编译器会发出警告,其中一个是有符号的,另一个是无符号的。 例如: int a; unsigned b; if ( a < b ) { // warning C4018: '<' : signed/unsigned mismatch } 在世界历史上,这个警告是否曾经发现过一个真正的错误? 无论如何,为什么呢?

C中的Implict函数声明是否实际生成了对象代码?

在关于转换malloc的返回值的讨论过程中,许多人声称malloc的隐式声明会导致返回值转换为int然后重新转换回T*可能导致在以下情况下截断指针: sizeof(int) < sizeof(void*) 这意味着编译器执行以下操作: 链接并调用定义malloc的正确目标代码 生成目标代码以将返回值转换为较短的int类型 生成目标代码以转换回更大的目标指针类型 有人真的能certificate这种情况发生了吗? 在64位Linux上使用一些示例代码说? 我自己做,但我无法访问64位机器。