【发布时间】:2014-04-16 01:50:52
【问题描述】:
GCC 中使用的 C 版本是什么? C99、C11 还是 C90?我以为是 GCC 使用 C99 但我弄错了:
for(int i = 0; i < 100; i++){
...
}
错误:“for”循环初始声明只允许在 C99 模式下使用。
【问题讨论】:
-
如果需要 C99,请使用
gcc -std=c99。
GCC 中使用的 C 版本是什么? C99、C11 还是 C90?我以为是 GCC 使用 C99 但我弄错了:
for(int i = 0; i < 100; i++){
...
}
错误:“for”循环初始声明只允许在 C99 模式下使用。
【问题讨论】:
gcc -std=c99。
根据2 Language Standards Supported by GCC:
如果没有给出C语言方言选项,默认是
-std=gnu90;这将在未来的某个版本中更改为-std=gnu11。
【讨论】:
我相信默认是-std=gnu90。您可以在编译器标志中指定 -std=c99 来支持这一点。
【讨论】:
默认情况下 gcc 使用 C90 和 GNU extension,这在 gcc 文档 Language Standards Supported by GCC 中都有介绍,其标志是 -std=gnu90:
如果没有给出 C 语言方言选项,则默认为 -std=gnu90;这旨在在将来的某个版本中更改为 -std=gnu11。
如果你想要 C99 支持而不应该使用 -std=c99,虽然这并不意味着 gcc 不会使用扩展,所以如果你想在 gcc 使用扩展时收到警告,你需要添加 @987654329 @ 和 -pedantic-errors 将其变为错误:
要获得标准要求的所有诊断,您还应该指定 -pedantic(或 -pedantic-errors,如果您希望它们是错误而不是警告)
【讨论】:
使用 -std=99
在 C99 之前,您必须在块的开头定义局部变量。 C99 引入了 C++ 特性,可以将局部变量定义与指令混合,并且可以在 for 和 while 控制表达式中定义变量。
【讨论】: