C++实操 - 函数无参数的表示方法

关于C和C++的标准,可以在Open Standards这个网站找到。

C语言标准:

点开网站首页。

找到"WG14 - C",点开页面。

找到“The current C programming language standard (C11) ISO/IEC 9899 was adopted by ISO and IEC in 2011.”,点开连接。

找到“The latest publically available version of the C11 standard is the document WG14 N1570, dated 2011-04-12. This is a WG14 working paper, but it reflects what was to become the standard at the time of issue.”,这个N1570.pdf下载下来就是C11标准文档。

同一页面,下面还可以下载C99的标准文档,“The latest publicly available version of the C99 standard is the combined C99 + TC1 + TC2 + TC3, WG14 N1256,”

同一页面,还有个C99RationaleV5.10.pdf文档,“The rationale for the C99 standard is available.”。

C++标准:

回到网站首页。

找到“* WG21 - C++”,点开页面。

找到“* ISO/IEC 14882:2017 Programming Language C++ - draft”,点开页面。

找到“A draft for the 2020 edition is available in N4849.”,这个是最新版本,

找到“A draft for the 2011 edition is available in N3242.”,这就是C++11版本。

注意:中间的版本,可以在标准下载页面,找到“papers”,点开后,选择相应年份,下载相应版本。

上面拿到的只是一些草稿版本,如果要下载正式版,要去ISO官方网站,而且是要花钱的哦。是以瑞士法郎(CHF)标价,每个198,相当贵了。

C标准最新2018:

ISO - ISO/IEC 9899:2018 - Information technology — Programming languages — C

C++标准最新2020:

ISO - ISO/IEC 14882:2020 - Programming languages — C++

关于C语言标准的一些信息,还可以参考下面的链接:

The Standard - C

关于C++语言标准,还可以参考网站:Standard C++

------------------------------- 

标准已经找到,那关于语言上的问题就可以参照标准来解决。

现在正好有个问题,关于:

int func( ) 和int func( void )有什么不同?

如果一个函数没有参数,是不写参数列表,还是写上void好呢?

我们先查一下C++11的标准:

“8 Declarators” -> "8.3.5 Functions" -> 第4点。

找到:“The parameter list (void) is equivalent to the empty parameter list.”。

那就是说,在C++里,这两种写法是没有区别的。

再查一下C11的标准:

“6. Language” -> "6.7 Declarations" -> "6.7.6.3 Function declarators (including prototypes)" -> 第10点。

10 The special case of an unnamed parameter of type void as the only item in the list specifies that the function has no parameters.

这表明有void表示没有参数,没有void表示没有说明参数列表。

#include <stdio.h>


void func1( )

{

    printf("func1.\n");

}


void func2( void )

{

    printf("func2.\n");

}


int main( )

{

    func1(); 

    func2();


    func1(1);

    func2(2); // error: too many arguments to function ‘func2’


    return 0;

}

所以,如果参数位置不写,调用时可以使用任意参数列表,如果加上void,就表示没有参数,调用时不能传递参数。

注意,以上说明的都是函数在声明和定义时的格式,如果调用函数时,没有参数就为空,不能加void。

在C/C++编译器编译时,调用某个函数时,需要在调用点之前有这个函数的原型声明,比如在本编译单元的源文件内部或包含的头文件中。

如果在调用点之前有函数的定义,也可以编译通过,相当于编译器默认生成了函数的原型声明。

对于变量,也是这样的。

我们在处理原型声明和定义的时候,应该保证其一致性。

并且,当声明和定义同时出现在调用点之前,会以声明为准。

比如:

void func(void);

void func()
{

}

int main()

{

  f(1); // compile error
  return 0;
}

函数声明在调用点之前,则调用函数时以函数的声明为准,而不管函数定义在什么地方。

如果函数定义在调用点之前,而函数原型声明在调用点之后,则会按照函数定义的规则来调用。

为了方便起见,在源文件中,把需要的函数原型声明都放在开头,而函数定义和声明保持一致,位置只要在声明之后即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值