相关疑难解决方法(0)

ANSI C和K&R C之间的主要区别是什么?

关于ANSI C维基百科文章说:

ANSI C标准化过程的目标之一是生成K&R C(第一个发布的标准)的超集,其中包含随后引入的许多非官方特征.但是,标准委员会还包括一些新功能,例如函数原型(借用C++编程语言)和更强大的预处理器.参数声明的语法也已更改,以反映C++样式.

这让我觉得有差异.但是,我没有看到K&R C和ANSI C之间的比较.是否有这样的文件?如果没有,主要区别是什么?

编辑:我相信K&R书的封面上写着"ANSI C".至少我相信我在家里的版本确实如此.那么也许没有什么区别了?

c kr-c c89

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

功能声明:K&R与ANSI

K&R函数声明和ANSI函数声明之间有什么区别?

c kr-c

35
推荐指数
2
解决办法
3万
查看次数

C中这个奇怪的函数定义语法是什么?

我最近在玩GNU Bison的时候看过这样的一些函数定义:

static VALUE
ripper_pos(self)
    VALUE self;
{
    //code here
}
Run Code Online (Sandbox Code Playgroud)

为什么self括号外的类型?这是有效的C吗?

c function definition

34
推荐指数
2
解决办法
6033
查看次数

`f(void)`表示C++ 11或C中没有参数?

在C++ 11中,以下函数声明:

int f(void);
Run Code Online (Sandbox Code Playgroud)

意思是:

int f();
Run Code Online (Sandbox Code Playgroud)

由非依赖类型void的单个未命名参数组成的参数列表等效于空参数列表.

我得到(也许是错误的)印象这是一个旧功能,也许是从C继承而来的?

有没有人知道这种方式背后的历史或理由来声明一个没有参数的函数?

c c++ c++11

24
推荐指数
2
解决办法
1419
查看次数

功能定义C.

可能重复:
C函数语法,参数列表后声明的参数类型

我在" 专家C编程 "中看到了以下函数定义语法

int compare(s1, s2)
    char * s1, *s2;
{
    while (*s1++ == *s2) {
        if (*s2++ == 0) return (0);
    }
    return (*--s1 - *s2);
}
Run Code Online (Sandbox Code Playgroud)

上述定义如何有效?它编译和运行完美,没有任何错误.

对于函数定义,我更熟悉以下语法

int compare(char * s1,char *s2)
{
    while (*s1++ == *s2) {
        if (*s2++ == 0) return (0);
    }
    return (*--s1 - *s2);
}
Run Code Online (Sandbox Code Playgroud)

并且我没有看到书中给出的那个(在我大学或其他地方学习C时),任何人都可以对书中给出的那些进行一些说明.

c function

10
推荐指数
1
解决办法
1395
查看次数

函数原型 - 关闭参数检查

从K&R Book on C,我收集到如果函数原型声明省略了参数(如int foo();),关闭类型和参数检查,并且没有假设参数与旧版本的C兼容,因此它不会打破遗留代码.

但是下面的代码抛出了原型不匹配的编译错误:

#include <stdio.h>
void test();
int main(void) {
    test(34.5f);
}

void test(float a) {
    printf("%f\n", a);
}
Run Code Online (Sandbox Code Playgroud)

错误:

C:\***.c:7:6: error: conflicting types for 'test'
 void test(float a) {
      ^
Run Code Online (Sandbox Code Playgroud)

有什么解释吗?

c function function-prototypes

6
推荐指数
2
解决办法
119
查看次数

奇怪的C语法是什么?

可能重复:
定义中的函数标题之后的C变量声明
这个C语法有用吗?

我试图理解一些C代码并遇到了这个函数的头部和第一个支撑之间声明变量的地方.

知道这些变量是什么吗?
他们是本地的还是全球的?

作者打算在这做什么?

void someFunction (m_ptr, n_ptr, params, err)
            integer  *m_ptr;        /* pointer to number of points to fit */
            integer  *n_ptr;        /* pointer to number of parameters */
            doublereal *params;     /* vector of parameters */
            doublereal *err;        /* vector of error from data */
        {
            //some variables declared here
            int       i;
            ...
            ...

            //body of the function here

        }
Run Code Online (Sandbox Code Playgroud)

c syntax

5
推荐指数
1
解决办法
1242
查看次数

结构体在函数名/参数之后、括号之前声明。有人能解释一下这个C语法吗?

这是代码:

A_output(message) 
 struct msg message;
{

}
Run Code Online (Sandbox Code Playgroud)

我以前从未见过这样的语法。该结构定义在做什么?这只是在参数字段中指定“消息”的“类型”的另一种方式吗?那么,它是一样的吗?:

A_output(struct msg message) 
{

}
Run Code Online (Sandbox Code Playgroud)

c struct function function-definition

5
推荐指数
1
解决办法
325
查看次数

非原型函数声明

函数声明与函数原型有何不同?

我发布这个问题时参考了这个问题的答案

c

4
推荐指数
1
解决办法
8155
查看次数

函数声明和大括号之间的C语句

可能重复:
这个C语法有用吗?
在定义中的函数标题之后的C变量声明
这是什么奇怪的C语法?

我正在尝试理解一些代码,它具有以下内容:

int getr(fget)
FILE *fget;
{
   /* More declarations and statements here */
   return (1);
}
Run Code Online (Sandbox Code Playgroud)

以上和之间有什么区别:

int getr(fget)
{
   FILE *fget;
   /* More declarations and statements here */
   return (1);
}
Run Code Online (Sandbox Code Playgroud)

如果是这样,他们有什么不同?

c curly-braces

3
推荐指数
2
解决办法
2037
查看次数