就像标题所说,我需要code::blocks与之合作C11,我无法弄清楚如何去做.
我去了settings=> compiler settings=> Other options我添加-std=c11并尝试了-std=gnu11,两者似乎都没有用.
我编译gcc-5.2然后我更改了默认编译器(gcc-4.9)仍然没有结果.
当我尝试编译以下程序时:
#include<stdio.h>
int main(void){
int arr[] = {0,1,2,3,4};
for(int i=0;i<5;i++){
printf("%d ",arr[i]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到以下内容:
|6|error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode|
Run Code Online (Sandbox Code Playgroud)
但如果我在终端(ubuntu 15.04,64BIT,gcc-5.2)中这样做:
./install/gcc-5.2.0/bin/gcc5.2 program.c -o program
Run Code Online (Sandbox Code Playgroud)
似乎工作正常.
我的问题是,如何code::blocks与之合作c11?
我试图做变量位算术a和b.当我反转时a,其值为0xAF,结果显示为8位数.与其他显示为2位数的人不同.
我不知道为什么会发生这种情况,但是猜测它与%x显示方式和小端有关?
这是我的代码:
#include <stdio.h>
int main()
{
int a = 0xAF; // 10101111
int b = 0xB5; // 10110101
printf("%x \n", a & b); // a & b = 10100101
printf("%x \n", a | b); // a | b = 10111111
printf("%x \n", a ^ b); // a ^ b = 00011010
printf("%x \n", ~a); // ~a = 1....1 01010000
printf("%x \n", a << 2);// a << 2 = 1010111100
printf("%x …Run Code Online (Sandbox Code Playgroud) 我注意到以下关于理解严格别名的代码:
uint32_t
swap_words( uint32_t arg )
{
U32* in = (U32*)&arg;
uint16_t lo = in->u16[0];
uint16_t hi = in->u16[1];
in->u16[0] = hi;
in->u16[1] = lo;
return (in->u32);
}
Run Code Online (Sandbox Code Playgroud)
据作者说,
使用GCC 4.0编译时启用-Wstrict-aliasing = 2标志的上述源 将生成警告.这个警告是误报的一个例子.允许这种类型的强制转换,并生成相应的代码(见下文).清楚地记录了-Wstrict-aliasing = 2可能返回误报.
我想知道什么是误报,我应该在别名变量时注意它吗?
以下是上面提到的"适当的代码(见下文)",如果它是相关的:
-fstrict-aliasing -O3 -Wstrict-aliasing -std=c99在GNU C 4.0.0版(Apple Computer,Inc.build 5026)上编译(powerpc-apple-darwin8),
swap_words:
stw r3,24(r1) ; Store arg
lhz r0,24(r1) ; Load hi
lhz r2,26(r1) ; Load lo
sth r0,26(r1) ; Store result[1] = hi …Run Code Online (Sandbox Code Playgroud) 码:
static volatile unsigned char TMR0 @ 0x01;
static volatile unsigned char PORTA @ 0x05;
static volatile unsigned char PORTB @ 0x06;
static volatile unsigned char PORTC @ 0x07;
Run Code Online (Sandbox Code Playgroud)
此代码来自PIC16F877A的HT-PICC编译器pic.h库文件
我理解静态volatile和其他关键字的含义.这里Timer0的寄存器地址是0x01,但为什么它们@在它前面使用呢?它与指针有关吗?
将布尔类型变量与以下内容进行比较是否更好:
== FALSE和!= FALSE; 要么== TRUE和!= TRUE?我正在使用 Visual Studio (2017),我需要以下内容。
我有一个文件夹,代码生成器在其中放置了从正式模型获得的 .h 和 .c 文件。这个文件夹不是我控制的,比如我不能在里面写,但它是由另一个团队成员更新的。
通过使用 /I 编译器选项(或项目属性中的其他包含目录),我设法在我的 VS 项目中导入了所有生成的头文件。我应该做的是将这个生成的代码集成到一个特定的平台,这意味着我必须在目标平台上编译生成的代码和集成代码。问题是,编译器无法解析生成代码的生成函数定义,因为它只能看到 .h 文件。我得到的是链接错误(外部符号未解析)
为了解决这个问题,我手动添加了现有的.c文件,一一添加。此解决方案带来的明显问题是
问题是:有没有可以设置的选项来指定源文件的路径而不是一一传递?
注意:仅将生成的代码复制并粘贴到 VS 项目文件夹中是不可接受的解决方案。
谢谢
我读过有关携带依赖关系和依赖关系排序之前,在其定义中使用一个5.1.2.4(p16):
在以下情况下,评估
A在评估之前是依赖顺序的B:—
A对原子对象执行释放操作M,并在另一个线程中B执行消耗操作M并读取以 为首的释放序列中的任何副作用写入的值A,或— 对于某些求值
X,A之前是依存顺序X并X带有对 的依存关系B。
所以我试图制作一个可能有用的例子。就这个:
static _Atomic int i;
void *produce(void *ptr){
int int_value = *((int *) ptr);
atomic_store_explicit(&i, int_value, memory_order_release);
return NULL;
}
void *consume(void *ignored){
int int_value = atomic_load_explicit(&i, memory_order_consume);
int new_int_value = int_value + 42;
printf("Consumed = %d\n", new_int_value);
}
int main(int …Run Code Online (Sandbox Code Playgroud) 我在codeacademy上学习c,并且从不兼容的类型“ void *”错误中分配了“ int *”。我的文件是一个.c文件,其中包括stdlib.h。我不理解该错误,似乎更正使用了相同的代码行。
我正在尝试使用malloc创建一个数组。
我试图找到其他主题的答案。看来malloc并不是做到这一点的最佳方法,但我想找到一种使它起作用的方法。
我在Mac上,我使用emacs进行编码和gcc进行编译。
这是我的代码的一部分:
int main(int argc, char *argv[])
{
char mot_secret[] = "PISCINE";
int nombre_lettres = strlen(mot_secret);
int *pnombre_lettres = &nombre_lettres;
int *decouverte = NULL;
int compteur = 10;
decouverte = malloc(nombre_lettres * sizeof(int));
if (decouverte == NULL)
{
exit(0);
}
Run Code Online (Sandbox Code Playgroud)
这是解决方案:(我尝试翻译一些变量)
int main(int argc, char* argv[])
{
char lettre = 0;
char secretword[100] = {0};
int *lettreTrouvee = NULL;
long coupsRestants = 10; // Compteur de coups restants (0 …Run Code Online (Sandbox Code Playgroud) 我对sizeof()C语言的输出感到困惑。说我有:
struct foo {
char a;
char b;
char c;
char d[0];
};
Run Code Online (Sandbox Code Playgroud)
我希望sizeof(struct foo)是4。但是,用gcc编译后返回3。另外,在使用严格的设置编译代码时-pedantic-errors,会出现编译器错误。
有人可以帮助我了解这种行为吗?
//Global space
int A;
int B = 0;
int C = 0x01;
static int D;
static int E = 0;
static int F = 0x01;
void foo()
{
static int G;
static int H = 0;
static int I = 0x01;
}
Run Code Online (Sandbox Code Playgroud)
我的理解是,所有未显式初始化或初始化为 0 的全局变量和静态变量都将进入 BSS 部分。所有使用 0 以外的值初始化的全局变量和静态变量都将进入 DATA 部分。我对吗?
在这种情况下,以下内容是正确的。
A -- BSS (No Explicit init)
B -- BSS (init to 0)
C -- DATA (!= 0)
D -- BSS
E -- BSS
F -- DATA
G -- …Run Code Online (Sandbox Code Playgroud)