【问题标题】:Function prototypes without argument name and function declaration without data type in Visual StudioVisual Studio 中没有参数名称的函数原型和没有数据类型的函数声明
【发布时间】:2014-01-10 00:17:18
【问题描述】:

下午好,

我的任务是实现似乎是在 Visual Studio 2010 中为 C99 编写的代码。我研究了许多 C99/Visual Studio 兼容性线程,但我没有找到任何与解决我的问题相关的内容。

基本上,我必须移植的代码具有函数原型和声明,其编写方式如下:

void myfunc(int, char*); //Prototype

void myfunc(variable1, pointer1) //Declaration
{
   ;//...
}

但Visual Studio 2010只愿意接受

void myfunc(int variable1, char* pointer1); //Prototype

void myfunc(int variable1, char* pointer1) //Declaration
{
   ;//...
}

我不能 100% 确定这是否是 C99 兼容性问题或一些过时的编码习惯,但源文件正在由第三方不断更新,我要求避免更改其中的任何内容(例如作为重命名每个函数),由于插件编译器,我也需要使用 Visual Studio 2010。是否有允许这种风格的函数声明的选项?

谢谢,

【问题讨论】:

    标签: c++ visual-studio-2010 function-prototypes


    【解决方案1】:

    据我所知 MS VC++ 不支持 C99。

    至于函数定义thsi定义

    void myfunc(variable1, pointer1) //Declaration
    {
       ;//...
    }
    

    即使对于 C89 也是无效的。在这个标题之后

    void myfunc(variable1, pointer1)
    

    在大括号之前应该有标识符声明。 如果存在这些声明并且您只是打错字,那么您可以使用 MS VC++ 2010。但是您必须将代码编译为 C 代码。

    根据 C 标准

    6 如果声明符包含一个标识符列表,则每个声明在 声明清单应至少有一个声明符,即 声明者应仅声明标识符列表中的标识符, 并且应声明标识符列表中的每个标识符。一个 声明为 typedef 名称的标识符不应重新声明为 范围。申报清单中的申报内容不得包含 存储类说明符,而不是寄存器,没有初始化。

    【讨论】:

    • 我明白你在说的是老式的 C 语法。不,没有标识符声明。否则代码应该在 Linux 中的 Eclipse 下编译。
    • @user2056201 我添加了来自 C 标准的引用。看来您的代码很旧。
    【解决方案2】:

    这是 C 和 C++ 之间的区别。

    事实上,在 C++ 中,请看下面我更正的注释:

    void myfunc(int variable1, char* pointer1); // Declaration
    
    void myfunc(int variable1, char* pointer1)  // Definition
    {
       // ...
    }
    

    【讨论】:

      猜你喜欢
      • 2013-01-18
      • 2014-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      • 2016-07-07
      相关资源
      最近更新 更多