Tag: gcc

什么是第一个双倍偏离相应的长三角?

我想知道从0d向上的第一个双重偏离“相同值”的长度偏离一些增量,比如1e-8。 我虽然失败了。 我试图在C中做这个,虽然我通常使用托管语言,以防万一。 请帮忙。 #include #include #define DELTA 1e-8 int main() { double d = 0; // checked, the literal is fine long i; for (i = 0L; i DELTA || di < -DELTA) { printf("%f", d); break; } } } 我猜测问题是di将我加倍并且因此d == i然后差异总是为0.我还能如何正确地检测到这一点 – 我更喜欢有趣的C铸造而不是比较字符串,这会永远。 答案 :完全符合我们的预期。 根据标准C / UNIX / POSIX工具,2 ^ 53 […]

C程序的gcc和g ++之间的性能差异

让我说我用C编写了一个程序并用gcc和g ++编译它,编译运行得更快? gcc还是g ++? 我认为g ++编译会使它变慢,但不确定。 让我再次澄清我的问题,因为有关gcc的说法。 假设我在控制台上编译这样的程序。 gcc ac g++ ac 哪个a.out运行得更快?

在定义结构时避免“重新定义typedef”警告

我正在定义一些引用彼此的结构,并在使用它们之前键入结构,因此每个结构都“了解”其他结构(没有这个就得到了编译错误)。 不确定这是否必要或正确。 现在用gcc编译时,我正在“重新定义typedef”警告。 这是怎样的正确方法? typedef struct a A; typedef struct b B; typedef struct c C; struct a { B* list; A* parent; }; struct b { A* current; B* next; }; struct c { A* current; A* root; }; 更新:愚蠢,错误的复制粘贴导致此标头被包含在另一个文件中两次。 我是C的新手,并认为它必须与文件中的结构两次有关。 谢谢@Kevin Ballard的提醒。

Linux上的这个GCC错误是什么,我该如何解决? gcc:内部编译器错误:非法指令(程序为)

我输入gcc hello.c ,这会出现: gcc: internal compiler error: Illegal instruction (program as) Please submit a full bug report, with preprocessed source if appropriate. See for instructions. hello.c只是: int main() { return 0; } 我想不出有什么方法可以让它更简单! (那里的printf也是如此。) 那么:你如何解决这个问题? 我在Raspberry Pi上的Raspian上。 编辑 gcc -v给出 Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/4.6/lto-wrapper Target: arm-linux-gnueabihf Configured with: ../src/configure -v –with-pkgversion=’Debian 4.6.3-14+rpi1′ –with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs –enable-languages=c,c++,fortran,objc,obj-c++ […]

如何在gcc中编译一个包含头文件的C程序?

我想在gcc中编译一个C程序,它有我的2个头文件。 我正在使用命令: gcc UDP_Receive.c -o UDP_Receive -lm 编译它但我得到一个错误,指出“UDP_Data.h:没有这样的文件或目录” 如何告诉编译器包含这些头文件? 头文件: #include“UDP_Data.h” #include“Crypt.h” 谢谢,Ritesh

使用gcc 未定义引用`__gxx_personality_v0′

可能重复: 什么是__gxx_personality_v0? 我已经在编译C ++代码的上下文中看到了这个问题。 但是我要编译纯 C代码并继续收到此错误。 我被禁止使用“-lstdc ++”作为解决此gcc问题的方法。 如何更改我的代码以使其正常工作以及为什么会出现此错误? 我的简化代码: //this is main.cpp #include int main() { char ch[3]; ch[0] = getc(stdin); ch[1] = getc(stdin); ch[2] = ‘\0’; printf(“%s\n”, ch); return 0; } 我的编译命令是: gcc main.cpp

GCC标准优化行为

在这里,我使用-O2优化级别(使用gcc 4.8.4)编译输入程序并测量执行时间: gcc -O2 -c test.c -o obj.o TIMEFORMAT=’%3R’ && time(./obj.o) execution time = 1.825 当我用-O2 https://gcc.gnu.org/onlinedocs/gcc-4.8.4/gcc/Optimize-Options等级中的GCC manuel中定义的选项列表替换-O2标志时。 html #Oftimize-这样的选项 : gcc -fauto-inc-dec -fcompare-elim -fcprop-registers -fdce -fdefer-pop -fdse -fguess-branch-probability -fif-conversion2 -fif-conversion -fipa-pure-const -fipa-profile -fipa-reference -fmerge-constants -fsplit-wide-types -ftree-bit-ccp -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop -ftree-fre -ftree-phiprop -ftree-slsr -ftree-sra -ftree-pta -ftree-ter -funit-at-a-time -fthread-jumps -falign-functions -falign-jumps […]

Postfix和前缀运算符作为函数参数 – 为什么会发生这种情况?

我在执行以下简单的c程序时遇到了一个非常有趣的事实: #include int main( ) { int k=0; printf(“%d%d%d”, k++, k, ++k); return 0; } 在Windows中它显示输出为:1 1 1 但是在linux(ubuntu)中,它显示为:1 2 2 为什么会这样?

如何将__attribute __((aligned(32)))应用于int *?

在我的程序中,我需要将__attribute__(( aligned(32)))应用于int *或float *我试过这样但我不确定它是否会起作用。 int *rarray __attribute__(( aligned(32))); 我看到了这个,但没有找到答案

gcc无法找到包含的标头

我正在使用名为colors.h的标colors.h组织我的源代码。 标题是这样的: #define DEFAULT 0x07 #define BLACK 0 #define GRAY 7 #define BLUE 9 #define GREEN 10 #define CYAN 11 #define RED 12 #define MAGENTA 13 #define YELLOW 14 我将标题放在主要源代码的同一目录下,名为kernel.c ,并包含如下: #include 但是当我尝试编译时,我得到了这个: ubuntu @ eeepc:〜/ Development / Test $ gcc -o kernel.o -c kernel.c -Wall -Wextra -nostdlib -nostartfiles -nodefaultlibs kernel.c:1:20:error:colors.h:没有这样的文件或目录 Ubuntu的@ EeePC的:〜/开发/测试$ 我能做些什么来解决这个问题?