Tag: 编译器构造

GCC:-O3和-Os之间的差异

我对GCC -O3标志非常熟悉,但是它与-Os有什么不同,在哪种情况下我们应该优先选择其他?

C / C ++编译器如何处理具有不同值范围的类型之间的类型转换?

如何在不丢失编译器内部数据的情况下进行类型转换? 例如: int i = 10; UINT k = (UINT) k; float fl = 10.123; UINT ufl = (UINT) fl; // data loss here? char *p = “Stackoverflow Rocks”; unsigned char *up = (unsigned char *) p; 编译器如何处理这种类型转换? 显示位的低级示例将受到高度赞赏。

警告:格式’%d’需要类型’int *’,但参数2的类型为’int’

所以我是C的新手,我遇到了这个警告发生的问题。 警告意味着什么,我该如何解决它。 我写的代码在这里: void main(void) { char* name = “”; int age = 0; printf(“input your name\n”); scanf(“%s\n”, name); printf(“input your age\n”); scanf(“%d\n”, age); printf(“%s %d\n”, name, age); }

所有C ++编译器都生成C代码吗?

可能是一个非常模糊和广泛的问题,但所有C ++编译器在将代码编译成机器代码之前是否先将代码编译成C语言?

在GCC或Cygwin中创建DLL?

我需要帮助将脚本(“iterator.c”)编译成DLL。 我不能使用VS2010,因为它不支持在C99标准中添加到C的function(我使用“complex.h”但VB不支持它)。 我一直在寻找替代品,但我发现的只是GCC,我不知道如何安装/使用(真的,我花了半个小时阅读文档,我甚至不懂我应该安装它,和Cygwin,我已经安装但我不知道如何使用它们。 另外,我已经安装了MinGW,但我认为它与Cygwin或多或少相同,我仍然不知道如何制作DLL。 这并不像我一直都懒惰甚至没有尝试过,只是因为这些编译器并不像我以前用过的任何东西(主要是Python IDLE和Visual Studio,它们让你很容易)。 我有点迷茫。 有人可以给我一些关于如何使用这个工具来制作我可以从另一个脚本访问的DLL的建议吗? 这非常重要。 先感谢您。

X86程序集 – 处理IDIV指令

我目前正在编写一个简单的C编译器,它将.c文件作为输入并生成汇编代码(X86,AT&T语法)。 一切都很好,但是当我尝试执行IDIVQ指令时,我得到一个浮点exception。 这是我的意见: int mymain(int x){ int d; int e; d = 3; e = 6 / d; return e; } 这是我生成的代码: mymain: .LFB1: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 movq %rsp, %rbp .cfi_offset 6, -16 .cfi_def_cfa_register 6 movq %rdi, -40(%rbp) movq $3, -8(%rbp) movq $6, %rax movq -8(%rbp), %rdx movq %rdx, %rbx idivq %rbx movq […]

如何在不指定-O1的情况下获得gcc -O1优化

我知道-O1会自动打开某些标志。 但是,可以手动打开这些标志。 如果我没有指定-O1,那么仍然可以通过指定-O1打开的所有标志来获得-O1优化。 我试过了 -fthread-jumps -fcprop-registers -fguess-branch-probability 但它仍然没有做-O1优化。 我可以告诉我何时使用gprof,因为性能不是很好。 我打开哪些标志来获得-O1优化?

C-to-hardware编译器(HLL综合)

我尝试对所有C-to-hardware编译器进行调查/历史记录。 对于所有不了解它们的人:他们采用C代码然后将其转换为某种硬件描述语言(如VHDL或Verilog),然后可用于生成硬件(通常它被映射到FPGA – 但我不仅限于此,ASIC作为目标也很好)。 我已经收集了一些(+关于它们的信息)。 所以我的问题是:你知道其他任何编译器(如果有的话,有任何引用,指针,有关它们的信息)? 到目前为止我的清单: AutoESL Bach-C(夏普) C2H(Altera) C2R(Cebatech) C2Verilog(CompiLogic / C Level Design / Synposys) Carte / MAP(SRC电脑) 级联(CriticalBlue) 现金(卡内基梅隆大学,匹兹堡) Catapult-C(Mentor Graphics) CHC(Altium) CHiMPS(华盛顿大学(西雅图)/ Xilinx /很快商业?) C-to-Verilog(海法) 同志(TU Braunschweig EIS + TU Darmstadt ESA) CVC(日立) 网络(NEC) 代达罗斯(Uni Amsterdam,Uni Leiden) DIME-C(Nallatech) eXCite(YXI) FP-Compiler(Altera) FpgaC(OpenSource) GarpCC(Callahan,加州大学伯克利分校) GAUT(UBS-UniversitätFrancreich) Handel-C(Celoxica) Hthreads(堪萨斯大学) Impulse-C(脉冲加速技术) Mitrion-C(Mitrionics) DWARV(代尔夫特理工大学) NIMBLE(Synopsys,EIS Braunschweig) […]

理解空main()的转换为汇编

有人可以解释GCC正在为这段代码做些什么吗? 什么是初始化? 原始代码是: #include int main() { } 它被翻译成: .file “test1.c” .def ___main; .scl 2; .type 32; .endef .text .globl _main .def _main; .scl 2; .type 32; .endef _main: pushl %ebp movl %esp, %ebp subl $8, %esp andl $-16, %esp movl $0, %eax addl $15, %eax addl $15, %eax shrl $4, %eax sall $4, %eax […]

编译器支持GNU语句表达式

哪些现代编译器支持Gnu语句表达式(C和C ++语言)。 我应该使用哪个版本的语句表达式? 语句表达式就像({ code; code; retval }) : int b=56; int c= ({int a; a=sin(b); a}) 我已经知道一些这样的编译器: GCC> = 3 Clang / LLVM> =? 英特尔C ++编译器> = 6.0(Linux版本, 检查第4页 ;位受限 ) Sun Studio> = 12( 新语言扩展 ) IBM XL for z / OS( 标记为IBM扩展 ) Open64(因为它使用了osprey-gcc前端) 这个编译器似乎不支持这个(我不确定): MS Visual C ++ PS。 这里列出了一些C / […]