0

是否有任何资源可以描述 C 和 C++ 必须提供的许多速记方法?那里有很多“狂野”的代码与教科书中的内容并不完全吻合。例如,许多教科书教你将变量的声明和初始化分开,但我看到相反的情况总是发生。

所以这是我目前的难题:C 是否允许没有类型标识符的程序?void同样,教科书告诉我,如果没有指明其他类型,我至少应该给你一个类型。但是,我看到了以下内容:

procedure(){
//procedure stuff
}

否则我一直被教导你至少必须这样做

void procedure(){
//procedure stuff
}

我发现自己经常处于这个位置,我认为这是没有接触过 C 或 C++ 中的项目/团队相关工作的症状。我很难确定“可编译代码”,因为许多书籍都教授了一种特定的方法,但在实践中完成相同任务的方法不止一种。谢谢。

4

3 回答 3

4

在函数定义中省略返回类型会使函数int在 C89 中隐式返回。从 C99 开始,这不再被接受,并且实现可能拒绝翻译具有省略返回类型的函数定义的程序。

来自 C99 基本原理文档:

在 C89 中,可以从声明中的声明说明符中省略所有类型说明符。在这种情况下, int 是隐含的。委员会认为此功能的固有危险大于其便利性,因此将其删除。

于 2012-01-15T23:35:46.047 回答
3

如果没有明确的返回类型,则假定为int. 由于遗留原因,它在那里。

另一个遗留兼容性问题是您也可以省略参数类型:

add(a, b) { // a and b implicitly int
    return a + b;
}

或者你可以声明参数的类型......不同......

strlen2(s)
const char *s;
{
    int l = 0;
    while(*s++) l++;
    return l;
}

不过,很明显,我不会在新代码中利用这些特性中的任何一个。

于 2012-01-15T23:35:03.097 回答
0

我认为您指的是参数。在这种情况下,如果没有传递参数,最好使用 void 但它不是必需的,尽管它有未知数量的参数

于 2012-01-15T23:37:43.663 回答