相关疑难解决方法(0)

struct中间的可变长度数组 - 为什么这个C代码对gcc有效

使用VLA(可变长度数组)有一些奇怪的代码,它被gcc 4.6视为有效C(C99,C11):

$ cat a.c
int main(int argc,char**argv)
{
  struct args_t{
     int a;
     int params[argc];        // << Wat?
                        // VLA in the middle of some struct, between other fields
     int b;
  } args;

  args.b=0;

  for(args.a=0;args.a<argc;args.a++)
  {
    args.params[args.a]=argv[0][0];
    args.b++;
  }
  return args.b;
}
Run Code Online (Sandbox Code Playgroud)

此代码编译时没有警告:

$ gcc-4.6 -Wall -std=c99 a.c && echo $?
0
$ ./a.out ; echo $?
1
$ ./a.out 2; echo $?
2
$ ./a.out 2 3; echo $?
3
Run Code Online (Sandbox Code Playgroud)

同样的-std=c1x:

$ gcc-4.6 -Wall -std=c1x a.c && …
Run Code Online (Sandbox Code Playgroud)

c gcc c99 variable-length-array c11

22
推荐指数
1
解决办法
5777
查看次数

用非gcc编译linux内核

Linux内核是为使用gcc进行编译而编写的,并使用了许多小而丑陋的gcc-hacks.哪个编译器可以编译linux内核除了gcc?

其中一个可以是英特尔编译器.内核编译需要什么样的最小版本?

还有一个Tiny C编译器,但它只能编译内核的简化和特殊编辑版本.

还有其他编译器能够构建内核吗?

linux compiler-construction llvm clang linux-kernel

6
推荐指数
1
解决办法
2047
查看次数

使用 g++ 编译 Linux 内核

我想使用g++编译Linux内核(用c编写)。这可能吗?如果没有,您能建议实现它的方法吗?

linux-kernel

5
推荐指数
1
解决办法
1304
查看次数

C++ int操作是否在mips体系结构上是原子的

我想知道我是否可以在没有锁定mips cpu(尤其是Amazon或Danube)的情况下读取或写入共享int值.我的意思是如果这样的读或写是原子的(其他线程不能中断它们).要清楚 - 我不想阻止线程之间的竞争,但我关心int值本身是否已损坏.

假设编译器在cpu字的边界处对齐所有的int,它应该是可能的.我用gcc(g ++).测试还表明它似乎正常工作.但也许有人肯定知道吗?

c++ multithreading processor mips cpu-architecture

4
推荐指数
2
解决办法
2506
查看次数