相关疑难解决方法(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,C99,ANSI C和GNU C有什么区别?

我已经开始编写关于codechef的编程实践,并且对C和C99之间区别感到困惑.C在这里意味着什么?是C89吗?检查此提交底部的语言.它包含C和C99.

我在互联网上发现了一个名为GNU C的东西.对于linux/unix系统有不同的C吗?这些是否符合ANSI的C标准?我也在一些地方读过"C99严格".这是什么?

是否还有其他不同的C标准?有没有叫做C 4.3.2的东西,还是当前使用的gcc版本?

编辑:

这个,这个,这有帮助.我会搜索更多并编辑未回答的内容.

我不是一个编程新手.我知道C语言是什么.我知道ANSI有不同的C标准,如C89,C99和C11.

c gcc c99 c89 ansi-c

115
推荐指数
4
解决办法
7万
查看次数

C99是否与C89向后兼容?

我习惯了旧式C和最近才开始探索c99功能.我只有一个问题:如果我在我的程序中使用c99,c99标志gcc并将其与之前的c99库链接,我的程序是否会成功编译?

那么,我应该坚持旧的C89还是进化?

c c99

15
推荐指数
2
解决办法
4032
查看次数

是(int i = 0 ... gnu扩展名的形式?

我正在研究用fortran编写的计算软件,但我在C中开发了一个小扩展.软件必须具有高可移植性,除了其他限制之外,还必须在GCC套件和英特尔编译器套件上进行编译.我通常在GCC上测试,一切顺利,直到我尝试使用intel套件进行编译.我在一个简单的for循环中得到了"预期的表达式"错误.我创建了一个最小的测试用例,似乎icc拒绝在for循环头内编译变量的声明.

#include <stdio.h>

int main(int argc, char** argv){
    for(int i = 0; i < 5; i++){
        printf("%d\n", i);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这给了我关于英特尔13,15,16,17和18(但不是19)的以下内容

$ icc test.c -o ./test
test.c(4): error: expected an expression
    for(int i; i < 5; i++){
        ^

test.c(4): error: identifier "i" is undefined
    for(int i; i < 5; i++){
               ^

compilation aborted for test.c (code 2)
Run Code Online (Sandbox Code Playgroud)

我不是C专家,但我看过这种形式已有数千次,GCC从未出现问题.这是英特尔最近采用的GNU扩展吗?

c gcc icc

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

标签 统计

c ×4

c89 ×2

c99 ×2

gcc ×2

ansi-c ×1

declaration ×1

icc ×1