Tag: 编译器构造

哪里用volatile?

我读过volatile关键字,但我不知道在什么情况下我应该使用它。 当内存(变量)得到更新并且进程没有意识到这一点? 在什么情况下驱动程序应该使用volatile变量?

可以在GCC中声明的静态数组的最大大小是多少?

怎么决定? 这取决于编译器/架构/主机系统吗? 例: int array[0x8000000000000000]; 对于x86_64位系统中的这一行,GCC输出: Error “size of array ‘array’ is too large”.

当铸造指针有增量运算符时会发生什么?

例如: int x[100]; void *p; x[0] = 0x12345678; x[1] = 0xfacecafe; x[3] = 0xdeadbeef; p = x; ((int *) p) ++ ; printf(“The value = 0x%08x”, *(int*)p); 编译上面的代码会在++运算符的行上生成一个左值所需的错误。

确定哪个编译器构建了Win32 PE

如何确定使用哪个C或C ++编译器来构建特定的Windows可执行文件或DLL? 有些编译器在最终的可执行文件中留下了版本字符串,但这在Windows上似乎比在Linux上更少见。 具体来说,我有兴趣区分Visual C ++和各种MinGW编译器(通常很容易从函数签名),然后在Visual C ++版本之间(6,2002 / 2003,2005,2008;更难做)。 有没有一种工具能够以半可靠的方式进行区分?

如何在没有C本机编译器的情况下创建C编译器

这是一个简单的问题。 如果编译C编译器需要一个C编译器……也许直接用汇编代码? 也许内核提供了将C转换为汇编程序并创建升级基础结构的基本工具? 这也是一个愚蠢的问题,但我真的很感兴趣如何设计一个操作系统(不是我)从0开始与CPU和内存交互。

如何在没有MSVCR90D.dll的情况下创建Win32 DLL?

我试图用一个简单的函数重新创建一个现有的C Win32 DLL。 我已经设法使用VS C ++ 2008 Express,我的新DLL在我的Vista开发机器和客户端的XP机器上运行。 但是,它不适用于其他网站。 我检查了依赖项,我的DLL需要MSVCR90D.dll和KERNEL32.dll,其中原始DLL只需要KERNEL32.dll。 什么是MSVCR90D.dll,如何在没有此依赖项的情况下创建简单的Win32 DLL?

如何在命令行中使用Visual Studio编译x64代码?

我想使用Windows命令行编译一个简单的hello-world风格的程序。 cl file_name.c 很容易。 现在我想在64位中做同样的事情。 我该怎么办?

我什么时候应该省略帧指针?

省略帧指针时是否有任何实质性的优化? 如果我通过阅读本页正确理解,当我们想要避免保存,设置和恢复帧指针时,使用-fomit-frame-pointer 。 这是仅针对每个函数调用完成的吗?如果是这样,是否真的值得为每个函数避免一些指令? 优化不是一件容易的事。 除了调试限制之外,使用此选项的实际含义是什么? 我使用和不使用此选项编译了以下C代码 int main(void) { int i; i = myf(1, 2); } int myf(int a, int b) { return a + b; } , # gcc -S -fomit-frame-pointer code.c -o withoutfp.s # gcc -S code.c -o withfp.s 。 diff -u这两个文件显示以下汇编代码: — withfp.s 2009-12-22 00:03:59.000000000 +0000 +++ withoutfp.s 2009-12-22 00:04:17.000000000 +0000 […]

来自USB的C ++和Lua

所以大约两周前,我开始学习C ++和Lua,我希望能够: 编译C ++代码(如果我可以拥有一个C编译器,这将是一个很好的奖励,因为我的语言列表中的下一个要学习) 解释(这是正确的术语吗?)Lua,和 从我的usb驱动器中完成所有这些操作,无需从Internet下载任何内容或更改路径变量。 (我将主要在学校的电脑上工作。) 作为旁注,我已经爱上了Sublime Text 2(便携式版本已经在我的USB驱动器上)。 如果它是绝对必要的,我会没有它,但我宁愿能够随时随地使用它。 请耐心等待我,正如我之前提到的,我刚刚开始学习如何编程,而我几乎不知道如何工作。 我见过类似的问题,但由于我的知识有限,他们似乎从来没有给我太多帮助 ,所以请不要像我在这个网站上看到的那些人那样毫不留情地关闭我的问题。 先感谢您!

处于相同“if”条件的两个“==”相等运算符未按预期工作

我试图建立三个相等变量的相等,但下面的代码不打印应该打印的明显正确的答案。 有人可以解释,编译器如何在内部解析给定的if(condition) ? #include int main() { int i = 123, j = 123, k = 123; if ( i == j == k) printf(“Equal\n”); else printf(“NOT Equal\n”); return 0; } 输出: manav@workstation:~$ gcc -Wall -pedantic calc.c calc.c: In function ‘main’: calc.c:5: warning: suggest parentheses around comparison in operand of ‘==’ manav@workstation:~$ ./a.out NOT Equal […]