Tag: gcc

使用curses.h从键盘获取char

我正在尝试使用curses.h从键盘获取一个字符。 这是我的源码(get_char_example.c): #include #include int main(void) { char ch; printf(“Enter a character: “); ch = getch(); printf(“\nIts ASCII code is %d\n”, ch); return 0; } 我使用以下命令编译: gcc get_char_example.c -o get_char_example 我收到以下错误: /tmp/ccjaXwRU.o:在函数`main’中: get_char_example.c:(.text+0x1c): undefined reference to `stdscr’ get_char_example.c:(.text+0x24): undefined reference to `wgetch’ collect2: error: ld returned 1 exit status 使用:gcc(GCC)7.2.0 Arch Linux 4.13.9-1-ARCH 提前致谢!

-mno-cygwin:gcc构建Mercurial(Windows 2000)

由于Mercurial安装程序无法在旧的Windows 2000系统上运行,因此我尝试从源代码构建它。 它抱怨C编译器不识别选项-mno-cygwin 。 我的gcc版本是4.6.1。 而MinGw只有两个月大了。 遵循以下步骤: https : //www.mercurial-scm.org/wiki/BuildingOnWindows F:\mercurial-2.0.2>python setup.py build running build running build_mo warning: hgbuildmo: could not find msgfmt executable, no translations will be built running build_py package init file ‘mercurial\__init__.py’ not found (or not a regular file) package init file ‘mercurial\__init__.py’ not found (or not a regular file) running build_ext […]

GCC抱怨非标准呼叫约定“ZEND_API”

在PHP的Zend引擎代码中,我在头文件中看到如下所示的行。 ZEND_API char *zend_strndup(const char *s, unsigned int length) ZEND_ATTRIBUTE_MALLOC; 我是专业的C / C ++编程新手。 当我尝试使用gcc编译此包中的c文件时,我得到错误 zend_alloc.h:55: error: expected =, ,, ;, asm or __attribute__ before char 我尝试了命令gcc -I./ -I../TSRM zend_language_*.c 看起来gcc抱怨ZEND_API。 ZEND_API表示什么? 任何人都可以帮我弄清楚为什么会发生这种错误? 文件所在的SVN存储库。

C编译器GCC和Turbo的奇怪行为

我已经经历了其他类似的问题,但试图了解我所面临的情况。 所以,这是我的两行C代码。 int i=0; printf(“%d %d %d %d %d”,i++,i–,++i,–i,i); 以下是我从GCC和Turbo C编译器获得的输出。 GCC 输出: -1 0 0 0 0 Turbo C. 输出: -1 0 0 -1 0 我尝试了单独使用预增量运算符的各种实验,并且两个编译器的工作方式类似,但是当我使用上面的printf语句时,输出会有所不同。 我知道Turbo C是一个古老的编译器,现在已经过时和非标准,但仍无法弄清楚上面的代码有什么问题。

从gcc和mingw中删除不需要的代码

我注意到mingw在调用main()之前添加了很多代码,我假设它用于解析命令行参数,因为其中一个函数被称为__getmainargs(),并且还有很多字符串被添加到最终的可执行文件中,例如mingwm.dll和一些错误字符串(包括应用程序崩溃)说mingw运行时错误或类似的东西。 我的问题是:有没有办法删除所有这些东西? 我不需要所有这些东西,我尝试了tcc(微小的c编译器)它完成了这项工作。 但不像gcc那样跨平台(solaris / mac) 有任何想法吗? 谢谢。

gcc包含C程序的所有头文件后如何输出中间文件?

在典型的C程序中,我将其分解为几个组件: // main.c #include ‘part-ah’ #include ‘part-bh’ main () { // … } // part-ah #include ‘part-ch’ // … 我想将整个项目导出为一个文件,包括递归的每个依赖项(不包括标准库),我怎么能用gcc做到这一点?

如何自动矢量化数组比较function

这是这篇文章的后续内容。 免责声明:我做过零分析,甚至没有应用程序,这纯粹是为了让我学习更多关于矢量化的知识。 我的代码如下。 我正在使用g3 4.9.4在配备i3 m370的机器上进行编译。 第一个循环按照我的预期进行矢量化。 然而,检查每个temp元素的第二个循环不是矢量化的AFAICT,带有所有“andb”指令。 我希望它可以像_mm_test_all_ones那样进行矢量化。 该循环如何进行矢量化? 第二个问题,我真的希望这是一个更大的循环的一部分。 如果我取消注释下面的内容,则没有任何内容可以进行矢量化。 我怎样才能得到那个矢量化? #define ARR_LENGTH 4096 #define block_size 4 typedef float afloat __attribute__ ((__aligned__(16))); char all_equal_2(afloat *a, afloat *b){ unsigned int i, j; char r = 1; unsigned int temp[block_size] __attribute__((aligned(16))); //for (i=0; i<ARR_LENGTH; i+=block_size){ for (j = 0; j < block_size; ++j) { temp[j] […]

修改const int时gcc -O2标志会产生影响

我知道在C中我们可以通过指针修改’const int’。 但是在编译程序时我在gcc中启用了’-O2’标志,并且const int无法修改该值,所以只想知道gcc优化标志如何影响修改’const int’。 这是示例应用程序test.c #include #include int main(int ac, char *av[]) { const int i = 888; printf(“i is %d \n”, i); int *iPtr = &i; *iPtr = 100; printf(“i is %d \n”, i); return 0; } gcc -Wall -g -o test test.c ./test i is 888 i is 100 gcc -Wall -g […]

隐含的function声明

当未包含正确的头文件时,GCC通常会产生此警告。 此链接 – > www.network-theory.co.uk/docs/gccintro/gccintro_19.html表示因为函数声明是隐式的(而不是通过标头显式声明),错误的参数类型实际上可以传递给函数,产生不正确的结果。 我不明白这一点。 这是否意味着编译器生成的代码将机器的字大小推送到堆栈上以供被调用者使用,并希望最好? 细节表示赞赏。

除-Ofast以外的任何内容都会导致“未定义的引用”错误

我有一个包含math.h的C程序,并使用该头文件中的sqrt函数。 非常奇怪的是,当我没有传递-Ofast标志时,我的代码无法编译。 如果我使用以下代码编译我的代码: gcc -std=c99 foo.c 要么本身,要么添加任何-O1 , -O2或-Os (那些是大写的O)到该命令,我得到以下错误: /tmp/ccAcT2Bz.o: In function `sum_of_divisors’: foo.c:(.text+0xb): undefined reference to `sqrt’ collect2: error: ld returned 1 exit status -O3给出了一个类似但更精细的错误(请注意,我不在main调用sqrt ): /tmp/ccBKvvFS.o: In function `sum_of_divisors’: foo.c:(.text+0x5c): undefined reference to `sqrt’ /tmp/ccBKvvFS.o: In function `main’: foo.c:(.text.startup+0xe5): undefined reference to `sqrt’ foo.c:(.text.startup+0xf3): undefined reference to `sqrt’ collect2: error: ld returned […]