相关疑难解决方法(0)

在GCC中设置std = c99标志

我想知道是否有任何文件可以设置-std=c99标志,所以我不必为每次编译设置它.我在Ubuntu上使用GCC 4.4.

c programming-languages c99

63
推荐指数
2
解决办法
13万
查看次数

"int size = 10;" 产生一个恒定的表达?

以下代码在gcc 4.8和Clang 3.2下编译:

int main()
{
  int size = 10;
  int arr[size];
}
Run Code Online (Sandbox Code Playgroud)

C++标准的8.3.4/1表示数组的大小必须是一个整数常量表达式,这size似乎不是.这是两个编译器中的错误,还是我错过了什么?

最新的VC++ CTP用这个有趣的消息拒绝代码:

error C2466: cannot allocate an array of constant size 0
Run Code Online (Sandbox Code Playgroud)

有趣的是,它似乎认为size是零.但至少它拒绝了代码.gcc和Clang应该不一样吗?

c++ arrays compile-time-constant variable-length-array c++11

13
推荐指数
1
解决办法
1209
查看次数

为什么GCC不接受void-pointer算法被认为是一个错误?

关于C中如何禁止无效指针算术,至少有三篇不同的帖子; gcc 4.8.2允许它,假设void是字节大小; 以及如何打开额外的迂腐警告以触发错误.这是一个例子:

#include <stdio.h>

/* compile gcc -Wall -o try try.c */

int main() {
  char *str="string";
  void *vp= (void *) str;

  ++vp; /* arithmetic on void point.  huh? */

  printf("%s\n", (char*)vp);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是考虑在无效代码的情况下C编译器应该做什么.当编译器不对无效代码发出编译错误时,它不被视为错误吗?

无论如何,这对于编译器来说似乎是奇怪的行为 - 即使gcc没有发出编译错误,至少它可以使用默认编译器标志发出"已弃用"警告.而且,即便如此 -Wall,它仍然没有发出警告.咦?这让我感到惊讶,因为gcc看起来非常成熟,而C并不是一种新颖或复杂的语言.

c gcc pointers ansi

0
推荐指数
1
解决办法
654
查看次数