Tag: 编译

如何使用Turbo C ++编译器在Notepad ++中编译和调试C ++

我在notepad ++中安装了NppExecute插件。 我无法弄清楚在Notepad ++中编译和调试C,C ++程序的下一步。 系统详细信息:(a)Turbo C目录C:\ TC(b)OS Windows 7 请提供有关如何设置环境变量和脚本以进行编译和调试的完整详细信息。

是否可以在32位处理器的机器中运行64位代码?

我已经四处寻找这些问题的答案。 但运气不大。 是否可以在具有64-bit processor的计算机中运行32-bit代码? 答案似乎是肯定的。 但是在性能问题上存在争议,因为处理器上没有使用32-bits 。 现在我的问题反之亦然,是否可以在具有32-bit处理器的机器中运行64-bit代码? 从我的小理解,答案是否定的,因为设计为64-bit运行的代码将使用64-process registars但32-bit机器只提供32。 另一方面,我找到了这个链接 。 据此,可以在32位机器上编译64位代码。 但我不知道如何做到这一点加上如果在32-bit机器上进行编译也能保证在同一台机器上execution 。 谢谢你的帮助

为什么我们在编译期间需要共享库

为什么在可执行文件的编译期间我们需要共享库的存在? 我的理由是,由于共享库未包含在我的可执行文件中并且在运行时加载,因此在编译期间不应该需要它。 或者我错过了什么? #include int addNumbers(int, int); //prototype should be enough, no? int main(int argc, char* argv[]){ int sum = addNumbers(1,2); printf(“sum is %d\n”, sum); return 0; } 我在我当前的目录中有libfoo.so ,但我将其名称更改为libfar.so ,以便在编译时发现需要共享库,或者它不能编译。 gcc -o main main.c -L. -lfoo gcc -o main main.c -L. -lfoo给main.c:(.text+0x28): undefiend reference to ‘addNumber’ 我认为只有共享库的名称才足够。 不需要共享库本身,因为它位于LD_LIBRARY_PATH中并在运行时动态加载。 除了共享库的名称之外还需要其他东西吗?

使用内存屏障强制按顺序执行

试着继续我的想法,使用软件和硬件内存障碍我可以禁用编译器优化编译的代码中的特定函数的无序优化,因此我可以使用像Peterson这样的算法实现软件信号量或者Deker不需要无序执行,我测试了以下代码,其中包含SW barrier asm volatile(“”: : :”memory”) __sync_synchronize asm volatile(“”: : :”memory”)和gcc builtin HW barrier __sync_synchronize : #include int main(int argc, char ** argv) { int x=0; asm volatile(“”: : :”memory”); __sync_synchronize(); x=1; asm volatile(“”: : :”memory”); __sync_synchronize(); x=2; asm volatile(“”: : :”memory”); __sync_synchronize(); x=3; printf(“%d”,x); return 0; } 但编译输出文件是: main: .LFB24: .cfi_startproc subq $8, %rsp […]

字符串文字是否在C中编译时自动转换为char *?

如果我要做的事情如下: printf(“The string is: %s\n”, “string1”); 在编译时完成以下操作: printf(“The string is: %s\n”, (unsigned char*) “string1”); 还是类似的?

对象代码,用C语言链接时间

编译时,C在链接时间之前生成对象代码。 我想知道目标代码是否是二进制forms的呢? 如果是这样,链接时间接下来会发生什么?

C编译器是否重复(合并)代码?

循环展开是一种常见的优化,但反过来也是如此? (减小目标文件输出的大小,减小二进制)。 我很好奇,如果编译器将连续的,相同的代码块(或函数调用)重复数据删除到循环中,或者将重复的块提取到静态函数中,这是一种常见的技术。 我很感兴趣,因为C中只有头文件库*可以添加大量重复代码,因此了解一些C编译器是否能够检测到这一点并更有效地处理它会很有用。 * 通过header-only-library,我的意思是直接定义代码而不是函数定义的头。 如果这样做,了解适用于哪些条件和约束以确保可以使用它将是有用的。 注意(出于问题的目的 – 任何流行的C编译器都是精细的GCC / Clang / Intel / MSVC)。 我找到的一个只有头文件库,名为uthash,它使用了一些非常大的宏,我想知道是否有一些编译器技巧可以巧妙地去除这些巨大的代码块,请参阅:例如uthash.h ,另一个类似的示例是内联qsort.h 可以重复数据删除的块的示例(事实certificatePy_DECREF可以扩展为相当大的代码块)。 #define PY_ADD_TO_DICT(dict, i) \ do { PyDict_SetItemString(dict, names[i], item = PyUnicode_FromString(values[i])); \ Py_DECREF(item); \ } while (0) /* this could be made into a loop */ PY_ADD_TO_DICT(d, 0); PY_ADD_TO_DICT(d, 1); PY_ADD_TO_DICT(d, 2); PY_ADD_TO_DICT(d, 3); 请注意,这是设计的,但基于一个真实的例子。 澄清 […]

如何编译已经使用GCC进行C预处理的C代码?

我正在C预处理和C编译之间执行一些源处理。 目前我: gcc -E file.c > preprocessed_file.c 。 为preprocessed_file.c做更多的事情。 使用preprocessed_file.c继续编译。 如果您尝试编译preprocessed_file.c就像它是正常的C一样(步骤3),您将获得以下许多内容: /usr/include/stdio.h:257: error: redefinition of parameter ‘restrict’ /usr/include/stdio.h:257: error: previous definition of ‘restrict’ was here /usr/include/stdio.h:258: error: conflicting types for ‘restrict’ /usr/include/stdio.h:258: error: previous definition of ‘restrict’ was here /usr/include/stdio.h:260: error: conflicting types for ‘restrict’ […] 这只是在file.c使用#include 。 幸运的是,有一个选项告诉GCC它通过指定编译为c-cpp-output的语言来处理已经预处理的C代码(参见本页的-x )。 但它不起作用。 我得到这个: $ gcc -x […]

C编程中的rand()问题?

可能重复: 为什么我总是使用rand()得到相同的随机数序列? 所以,是的,这可能看起来有点小说,但是因为我在Java上变得合理后自学C,我已经遇到了一些麻烦。 我正在尝试在C中使用rand()函数,但我只能调用一次,当它执行时,它总是生成相同的随机数,即41.我正在使用Microsoft Visual C ++ 2010 Express,并且我已经设置它以便编译C代码,但唯一不起作用的是这个rand()函数。 我尝试过包含一些常用的库,但没有任何作用。 这是代码: #include “stdafx.h” #include “stdio.h” #include “conio.h” #include “stdlib.h” int main(void) { printf(“%d”, rand()); //Always prints 41 return 0; }

我一直收到一个collect2:错误:ld返回1退出状态

我有一点问题。 每次我尝试编译程序时,我都会收到“collect2:错误:ld返回1退出状态”。 我搜索了这个,查看了示例,并发现它通常发生在未正确使用头文件时; 但是,我没有在我的代码中使用头文件,所以我不确定为什么这样做。 我认为这对于那些得到此错误并且不理解原因的人会有所帮助。 我知道我的代码中存在很多错误,但我试图找到可以编译它的地方并解决所有问题。 谢谢一堆! #include #include struct node_t { double x; struct node_t *next; }; struct node_t *create_node(double n); void print_node (struct node_t * node ); void print_list (struct node_t * head ); struct node_t * insert_head (struct node_t *head , struct node_t * node ); struct node_t * insert_tail (struct node_t […]