我在cygwin windows上编写C语言。 在完成了一些C编程并熟悉语言后,我想深入了解编译器为我编写的代码做了些什么。 所以我写下了一个包含switch case语句的代码块,并使用以下方法将它们转换为汇编: gcc -S foo.c 这是C源: switch(i) { case 1: { printf(“Case 1\n”); break; } case 2: { printf(“Case 2\n”); break; } case 3: { printf(“Case 3\n”); break; } case 4: { printf(“Case 4\n”); break; } case 5: { printf(“Case 5\n”); break; } case 6: { printf(“Case 6\n”); break; } case 7: […]
如果我使用c89和c99编译以下程序有区别吗? 我得到相同的输出。 两者之间真的有区别吗? #include int main () { // Print string to screen. printf (“Hello World\n”); } gcc -o helloworld -std=c99 helloworld.c vs gcc -o helloworld -std=c89 helloworld.c
引用我正在阅读的书: signed char, signed short int, signed int, signed long int, signed long long int都称为标准有符号整数类型 unsigned char, unsinged short int, unsigned int, unsigned long int, unsinged long long int, _Bool称为标准无符号整数类型 除了标准整数类型之外,C99标准还允许实现定义的扩展整数类型 ,包括有符号和无符号。 例如,编译器可能提供有符号和无符号的128位整数类型。 我有第3点的问题。 这些“扩展整数类型”是什么? 任何例子?
我只需要一种方法来加载标签的地址,例如MyLabel:例如’src.asm’到例如’src.c’中的变量。 (这些文件将链接在一起)我使用gcc和nasm来组装这些文件。 如何加载标签地址?
我知道在过去有一个选项-fprefix-function-name可以为所有生成的符号添加前缀,它似乎不再是gcc的一部分。 有没有其他方法可以做到这一点?
如何从静态库创建共享对象文件? 我正在使用Cygwin。 以下语法是否正确? gcc -shared -o libexample.so libexample.a
在C11中,有一个关键字_Noreturn ,它是一个函数说明符(如inline is),表示函数没有返回 – 它调用exit()或等效函数。 还有一个标题 ,其完整定义是: 7.23 _Noreturn ¶1标题定义宏 noreturn 它扩展到_Noreturn 。 在GNU C(GCC)中,有一个属性__attribute__((noreturn)) ,它基本上执行相同的工作。 一个区别是__attribute__((noreturn))可以出现在函数声明__attribute__((noreturn))之前或之后: extern __attribute__((noreturn)) void err_error(const char *format, …); extern void err_error(const char *format, …) __attribute__((noreturn)); 问题是,如果在转换单元(TU)中包含 ,则__attribute__((noreturn))任何后续使用都会映射到__attribute__((_Noreturn)) ,这会导致编译失败,因为属性_Noreturn无法识别(即使关键字被识别为关键字)。 也就是说,据我所知,你不能同时使用这两个系统。 有什么方法可以解决这个问题,除了: 使用该属性使用的所有代码的大爆炸,或 使用不完全优雅的_Noreturn关键字? 您可以通过测试__STDC_VERSION__ >= 201112L来检测C11 – 该值由技术勘误1指定,因为标准意外地保留了未完全指定的值: __STDC_VERSION__整数常量201ymmL 。 178) 178)该宏未在ISO / IEC 9899:1990中规定,在ISO / IEC 9899:1990 / Amd.1:1995中指定为199409L,在ISO […]
我知道在C返回类型的sizeof运算符是size_t是定义的无符号整数类型。 这意味着它的最大尺寸应为65535如C99标准7.18.3所述 : limit of size_t SIZE_MAX 65535 但是在gcc-4.8.2头文件中, stdint.h定义了它的大小远大于65535与C99标准中规定的相反,如下所示, /* Limit of `size_t’ type. */ # if __WORDSIZE == 64 # define SIZE_MAX (18446744073709551615UL) # else # define SIZE_MAX (4294967295U) # endif 请帮助我理解为什么在我的误解背后存在差异或原因。
我想利用C11标准提供的新primefaces操作。 但是,尝试#include适当的头文件给了我这个: csort-par.c:5:23: fatal error: stdatomic.h: No such file or directory #include http://gcc.gnu.org/wiki/C11Status上的文档似乎说自从GCC 4.7以来提供了头文件…我错过了什么? __STDC_NO_ATOMICS__未定义。 gcc –version如下: gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1 Copyright (C) 2013 Free Software Foundation, Inc. 我确认__STDC_NO_ATOMICS__没有定义如下: #ifdef __STDC_NO_ATOMICS__ #error yes #else #error no #endif 收益率: csort-par.c:10:2: error: #error no #error no 编辑:感谢您的快速回复。 如果有人在谷歌遇到同样的问题而绊倒了这个问题,那么这是暂时的解决方案,直到他们发布GCC 4.9: UNIX便携式primefaces操作
我只想尝试在Windows下使用OpenCL。 摘要 :我尝试编译时遇到了“ undefined reference to ”错误 (使用命令gcc my.o -o my.exe -L “C:\Program Files (x86)\AMD APP\lib\x86_64” -l OpenCL )。 我的代码 #include #include int main(void) { cl_platform_id platform; int err; err = clGetPlatformIDs(1, &platform, NULL); if(err < 0) { perror("There's No Platform!"); exit(1); } /* Some more code… */ system("PAUSE"); } Makefile文件 all: addition addition: gcc […]