Tag: gcc

未定义的’pow’引用,即使-lm是一个编译标志。

任何原因cc -g -lm -DBLITZ_HOST_IS_LITTLE_ENDIAN都会在使用math.h的代码中产生错误? cc 4.0.3(记录的工作版本)和4.6.3(我当前版本)之间是否存在差异? makefile和asm.c https://gist.github.com/3801291 这是在ubuntu 12.04上 我的终端输出是要点中的注释。

ARM程序集:在重新加载’asm’时无法在类’GENERAL_REGS’中找到寄存器

我试图在ARM Cortex-a8上实现一个函数,该函数将32位操作数与ARM组件中的256位操作数相乘。 问题是我的寄存器用完了,我不知道如何减少这里使用的寄存器的数量。 这是我的function: typedef struct UN_256fe{ uint32_t uint32[8]; }UN_256fe; typedef struct UN_288bite{ uint32_t uint32[9]; }UN_288bite; void multiply32x256(uint32_t A, UN_256fe* B, UN_288bite* res){ asm ( “umull r3, r4, %9, %10;\n\t” “mov %0, r3; \n\t”/*res->uint32[0] = r3*/ “umull r3, r5, %9, %11;\n\t” “adds r6, r3, r4; \n\t”/*res->uint32[1] = r3 + r4*/ “mov %1, r6; \n\t” “umull […]

编译32位时出现__int128错误

c:\…random.h|106|error: expected unqualified-id before ‘__int128’ 当我编译32位程序时,上面是我得到的错误。 我正在使用http://sourceforge.net/projects/mingwbuilds/ 为什么? 我的代码用4.7.2编译得很好,但我想更新到4.8以修复错误,当没有零时,它会删除0用作指针警告的空值。 我想要的许多错误修复。 它在Windows上编译我的x64就好了。 有没有办法让它编译x32应用程序?

为什么-2147483648在适合int时会自动提升为long?

#include int main() { printf(“%zu\n”, sizeof(-2147483648)); printf(“%zu\n”, sizeof(-2147483647-1)); return 0; } 上面的代码给出了输出(gcc): 8 4 为什么-2147483648在第一个 printf自动提升为long ,即使它可以适合int ? 此外,我在MinGW中尝试了同样的方法,它给出了输出: 4 4 有人可以解释一下发生了什么吗?

如何让gcc ftrapv工作?

我正在编译下面的代码 $ gcc -Wall -ftrapv test.c 但是,运行生成的可执行文件始终打印-2147483648,这不是我的预期。 我正在运行gcc版本4.6.3(Ubuntu / Linaro 4.6.3-1ubuntu5)。 1 #include 2 #include 3 #include 4 #include 5 6 void h(int signal) 7 { 8 printf(“caught signal exiting\n”); 9 exit(1); 10 } 11 12 int main(void) 13 { 14 int x = INT_MAX; 15 int y; 16 17 signal(SIGABRT,h); 18 y = x+1; […]

如何消除“丢弃限定符”警告?

使用GCC和C99模式,我有一个声明为: void func(float *X); 当我调用该函数时,我使用了一个易失性数组Y: volatile float Y[2]; int main() { func(Y); return 0; } 编译时(使用-Wall ),我收到以下警告: warning: passing argument 1 of ‘func’ discards qualifiers from pointer target type blah.c:4: note: expected ‘float *’ but argument is of type ‘volatile float *’ 我可以使用显式(float *)类型转换来消除它,但这在代码中的许多地方重复。 有没有办法消除这个特定的警告,有一个选项或一个pragma(或等效的东西)?

这是一个合法的C ++代码吗?

代码来自这里 鉴于在C ++中您可以使用C库,您会说下面的代码是合法的C ++代码吗? 如果没有,需要应用哪些更改? 此代码使用g ++编译并按预期运行。 更新:谢谢你的所有答案。 我仍然有点困惑,因为没有就此代码是否符合C ++标准达成一致。 会问另一个问题以消除我的怀疑 更新2:关闭此问题的版主:刚刚注意到问题已经结束,我觉得这很荒谬。 这是一个脚踏实地的技术问题,我收到了脚踏实地的技术答案。如果你还没有完全阅读整个主题,这里是我们已经同意的结论的直观表示: 显然,C ++不是C的超集。 解决与编码标准有关的问题是错误的。 客户: #include #include #include #include #include #include #include #include #include #include #define PORT “3490” // the port client will be connecting to #define MAXDATASIZE 100 // max number of bytes we can get at once // get sockaddr, IPv4 […]

如何评估嵌套的预处理器宏

假设我想选择某个预处理程序指令的行为,在编译时评估常量字符串和另一个宏的结果的串联。 #define CASE1 text1 #define CASE2 text2 #define CASE3 text3 #define SCENARIO 3 /** the following won’t work – for examplification purposes only**/ #define FUNCTION CASE##SCENARIO /** whenever I write FUNCTION, I expect to see text3 **/ 我很难想到一个可行的解决方案,因为预处理器是一次通过的野兽。 这甚至可行吗?

我怎么告诉gcc我的内联汇编是否是堆栈的一部分?

考虑这样的内联汇编: uint64_t flags; asm (“pushf\n\tpop %0” : “=rm”(flags) : : /* ??? */); 尽管可能存在某种内在函数来获取RFLAGS的内容,但我如何向编译器指出我的内联汇编在堆栈顶部破坏了一个四字内存?

`char * array `和`extern char ** array`连接错误?

首先,看看这个例子(我为了举例而做了这个,它不是一个真正的程序): whatever.h #ifndef WHATEVER_H #define WHATEVER_H void fill(void); #endif main.c中 #include #include “whatever.h” char *names[10] = {NULL}; int main() { int i; fill(); for (i = 0; i < 10; ++i) printf("%s\n", names[i]); return 0; } whatever.c #include “whatever.h” extern char **names; void fill(void) { int i; for (i = 0; i < 10; ++i) […]