c - C 中的变量声明位置

标签 c declaration c89

我一直认为在 C 中,所有变量都必须在函数的开头声明。我知道在 C99 中,规则与 C++ 中的规则相同,但是 C89/ANSI C 的变量声明放置规则是什么?

以下代码使用 gcc -std=c89gcc -ansi 编译成功:

#include <stdio.h>
int main() {
    int i;
    for (i = 0; i < 10; i++) {
        char c = (i % 95) + 32;
        printf("%i: %c\n", i, c);
        char *s;
        s = "some string";
        puts(s);
    }
    return 0;
}

在 C89/ANSI 模式下,cs 的声明不应该导致错误吗?

最佳答案

它编译成功,因为 GCC 允许将 s 声明为 GNU 扩展,即使它不是 C89 或 ANSI 标准的一部分。如果您想严格遵守这些标准,则必须传递 -pedantic 标志。

{ } block 开头的 c 声明是 C89 标准的一部分;该 block 不一定是函数。

关于c - C 中的变量声明位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/288441/

相关文章:

c - 结构数组的运行时和编译时初始化之间的区别

java - 用于 C++ 实现的 native JNI 静态方法的 Java 运行时错误

c++ - E2321 声明未指定标签或标识符

c - 普通数组声明和在结构内声明的数组之间的内存和效率差异

c - 使用函数参数作为变量

c - 头文件中的全局变量

c - time.h - struct tm 和毫秒

c - 如何从 UART 正确接收字符串

可以重新声明 Swift 内置协议(protocol)吗?为什么?

c - C中的面向对象编程