相关疑难解决方法(0)

C中的变量声明放置

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

以下代码使用gcc -std=c89和成功编译gcc -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;
}
Run Code Online (Sandbox Code Playgroud)

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

c declaration c89

121
推荐指数
5
解决办法
8万
查看次数

哪里可以而且不能在C中声明新变量?

我听说(可能来自老师)应该在程序/函数之上声明所有变量,并且在语句中声明新变量可能会导致问题.

但后来我正在阅读K&R,我发现了这句话:"变量的声明(包括初始化)可能会在左括号后面引入任何复合语句,而不仅仅是开始函数的语句".他举了一个例子:

if (n > 0){
    int i;
    for (i=0;i<n;i++)
    ...
}
Run Code Online (Sandbox Code Playgroud)

我玩了一下这个概念,它甚至可以用于数组.例如:

int main(){
    int x = 0 ;

    while (x<10){
        if (x>5){
            int y[x];
            y[0] = 10;
            printf("%d %d\n",y[0],y[4]);
        }
        x++;
    }
}
Run Code Online (Sandbox Code Playgroud)

那么当我不允许声明变量时呢?例如,如果我的变量声明不在开括号之后呢?像这儿:

int main(){
    int x = 10;

    x++;
    printf("%d\n",x);

    int z = 6;
    printf("%d\n",z);
}
Run Code Online (Sandbox Code Playgroud)

这可能导致麻烦,具体取决于程序/机器吗?

c declaration

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

标签 统计

c ×2

declaration ×2

c89 ×1