转自:http://www.cppblog.com/ownwaterloo/archive/2009/04/26/omit_parameter_name.html

一、C与C++的细微区别

在函数声明中:
无论是C还是在C++,都可以省略形式参数名。
但是,通常都不建议省略形式参数名。

在函数定义中:
1. 当需要使用形式参数的时候,显然,必须给形式参数命名。

2. 当不需要使用形式参数的时候,C与C++有微小差异:
—— C不能省略形式参数名, 即使不使用。
—— C++可以省略形式参数名如果不使用。
—— 并且在C++中,如果给不使用的形式参数命名,可能会得到一个警告


二、示例:

#include <stdio.h>

void greeting_omit(const char* name);
void greeting_unuse(const char* name);
void greeting_nowarning(const char* name);

int main(void) {
    greeting_omit("");
    greeting_unuse("");
    greeting_nowarning("");
    (void)getchar();
    return 0;
}


三、三个函数分别实现如下:

三、1

void greeting_omit(const char* ) {
    printf("hello world\n");
}

——在C中是错误:
1. msvc :
error C2055: expected formal parameter list, not a type list
error C2055: 应输入形参表,而不是类型表

2. gcc : (报错更清晰一些)
error: parameter name omitted
错误: 省略参数名

——在C++中正确,且无警告。

三、2

void greeting_unuse(const char* name) {
    printf("hello Cherrie\n");
}

在C和C++中都正确,但可能得到一个警告:
1. msvc :
warning C4100: 'name' : unreferenced formal parameter
warning C4100: “name”: 未引用的形参

2. gcc :
warning: unused parameter 'name'
警告: 未使用的参数‘name’

在gcc中,打开这个警告的选项是-Wunused-parameter
该选项包含在-Wall中。

三、3

void greeting_nowarning(const char* name) {
    (void)name;
    printf("hello OwnWaterloo\n");
}

在C和C++中都正确,并且无警告。


相关链接:

——示例代码
http://immature.googlecode.com/svn/trunk/iMmature/sample/omit_parameter_name

C与C++的细微区别——省略形式参数名的更多相关文章

  1. write()和print()还有<%= %>的细微区别

    1.首先介绍write()和print()方法的区别: (1).write():仅支持输出字符类型数据,字符.字符数组.字符串等 (2).print():可以将各种类型(包括Object)的数据通过默 ...

  2. tomcat部署项目时省略项目名

    大家也许知道在eclipse上通过新建server来部署项目到tomcat,并且通过server来管理项目的启动配置.server会自动创建启动该项目的xml 如: <Context docBa ...

  3. 在tomcat中的conf文件夹下找server.conf 配置如下代码,可省略项目名路径访问 如 localhost:8080 即可访问到项目

    <Context path="" docBase="C:\Workspaces\Projects\SLSaleSystem_dw\WebRoot" rel ...

  4. JNI之C初探

    JNI是Java Native Interface的缩写,从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI一开始是为了本地已编译语言,尤其 ...

  5. Convert.ToInt32()、int.Parse()和(int)三者的区别

    Convert.ToInt32将object类类型转换成int类型,如Convert.ToInt32(session["shuzi"]); (int)适合简单数据类型之间的转换: ...

  6. [No000082]Convert和Parse的区别/Convert.ToInt32()与int.Parse()的区别

    (1)这两个方法的最大不同是它们对null值的处理方法: Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常. 没搞清楚Convert. ...

  7. 获取PHP文件绝对地址$_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 的区别

    通常情况下,PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 都会返回 PHP 文件的完整路径(绝对路径)与文件名: <?php echo 'SCRIPT_F ...

  8. PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 的区别 有点像static 和 self的意思 !

    PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 通常情况下,PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 都会返回 PHP ...

  9. Convert.ToInt32()与int.Parse()的区别

    Convert.ToInt32()与int.Parse()的区别 (1)这两个方法的最大不同是它们对null值的处理方法:    Convert.ToInt32(null)会返回0而不会产生任何异常, ...

随机推荐

  1. asp.net环境变量

    // 获取程序的基目录. System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径. System.Diagnostics.Process.G ...

  2. tcp 重发 应用层重传

    采用TCP时,应用层需要超时重传吗? 需要,原因如下: 1 tcp的超时控制不是你能设置的,所有的tcp超时都是用系统的时间设定,而且这个时间很长,超时的结果就是断开连接.和你应用要达到的目的显然差很 ...

  3. DedeCms 5.x 本地文件包含漏洞(respond方法)

    漏洞版本: DedeCms 5.x 漏洞描述: DedeCms是免费的PHP网站内容管理系统. plus/carbuyaction.php里没有对变量进行严格的过滤 出现漏洞的两个文件为: Inclu ...

  4. linux tail命令的使用方法详解(转)

    本文介绍Linux下tail命令的使用方法.linux tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新 ...

  5. WPF TreeView绑定字典集合

    <TreeView Name="Tree" HorizontalAlignment="Left" Height="269" Width ...

  6. LR 测试数据库总结

    今天工作中需要对mysql进行性能测试 我尝试用LR来做:但是mysql需要现在电脑上安装一个OBDC的mysql驱动器,然后在电脑的管理工具中的数据源中加入这个mysql驱动,测试连接数据库成功,O ...

  7. unity3D 搞定任意ios插件

    原地址:http://www.cnblogs.com/U-tansuo/archive/2012/11/22/unity_ios-plugin.html 说起unity调ios插件,好多淫比较头痛,探 ...

  8. HTML 快速入门

     最近帮朋友研究作一个网站,虽然对很多人来说这是很简单的事情,但是对我来说却比较复杂!废话不多讲了,看看我找的HTML快速入门,说不定也会对你有帮助! 一. HTML 的基本概念 HTML ( Hyp ...

  9. Linux EOF使用

    # cat << EOF > fileB   用法 例: vi ceshi.sh cat<<eof>file1 aaaa bbbb cccc dddd eof 操作 ...

  10. linux screen 命令详解(未验证+研究)

    一.背景 系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远 ...