`

编译器报:未调用原型函数(是有意用变量定义的吗?)(本文为原创,转载清注明出外)

F# 
阅读更多
MSDN解释:编译器检测到未使用的函数原型。如果有意将该原型作为变量声明,则移除左/右括号。什么意思,简单来说,就是编译无法分辨你当前的代码是在声明一个函数原型,还是在调用一个函数.因为在VS编译器里这样声明一个函数是正确的:test(int(a),int(b)),但我们经常用他做为函数调用来使用。
Code
// compile with: /W1
class Lock {
public:
   int i;
};

void f() {
   Lock theLock();  
   // try the following line instead
   // Lock theLock;
}

int main() {
}
当然你的意图是调用一个无参构造函数,然而编译器却认为你在声明一个函数.所以报错了.

解决方法是这样调用:test((int(a)),(int(b)));编译通过!!

附MSDN的一个例程:



Code
class BooleanException
{
   bool _result;

public:
   BooleanException(bool result)
      : _result(result)
   {
   }

   bool GetResult() const
   {
      return _result;
   }
};

template<class T = BooleanException>
class IfFailedThrow
{
public:
   IfFailedThrow(bool result)
   {
      if (!result)
      {
         throw T(result);
      }
   }
};

class MyClass
{
public:
   bool Foo()
   {
      try
      {
         IfFailedThrow<>(MyMethod()); //error

         // try one of the following lines instead
         // IfFailedThrow<> ift(MyMethod());
         // IfFailedThrow<>(this->MyMethod());
         // IfFailedThrow<>((*this).MyMethod());

         return true;
      }
      catch (BooleanException e)
      {
         return e.GetResult();
      }
   }

private:
   bool MyMethod()
   {
      return true;
   }
};

int main()
{
   MyClass myClass;
   myClass.Foo();
}
//在上面的示例中,不含参数的方法的结果作为参数传递给未命名本地类变量的构造函数。该调用会产生歧义:既可以是命名本地变量,也可以是使用对象实例以及相应的指向成员的指针运算符给方法调用加前缀。



分享到:
评论

相关推荐

    C++调用C函数实例详解

    C++调用C函数实例详解 前言:以前见到extern “C”这样的语句,只是简单地知道跟外部链接有关,但是没有深刻理解它的意思。 首先,为什么要使用extern “C”修饰符? C++调用其它语言的函数,由于编译器生成函数的...

    宏定义和函数调用的区别

    在探讨宏定义与函数调用的区别时,我们深入解析它们在C语言编程中的特性、应用场景以及潜在风险,以便更全面地理解这两种编程机制。 ### 宏定义与函数调用的本质区别 #### 宏定义(#define) 宏定义是预处理器的一...

    c调用C++函数

    本文将深入探讨如何实现C调用C++函数,并以QT框架为例,提供一种实现方法。 首先,了解C与C++的差异是必要的。C++是C语言的超集,它扩展了C语言的功能,引入了类、对象、模板等面向对象特性。由于C++支持名称空间和...

    如何使用MVSC编译器生成XFG函数原型哈希 .pdf

    总结来说,使用MVSC编译器生成XFG函数原型哈希是提升软件安全的重要手段,它通过精确控制调用目标,减少了攻击者利用控制流攻击的可能性。结合其他安全措施,如代码审查、入侵检测系统和安全开发生命周期,可以构建...

    程序设计-函数的声明与函数的原型.pptx

    如果函数的定义在调用它的代码之后,那么必须在调用之前进行声明,否则编译器会因为找不到函数的定义而报错。 函数声明的一般形式如下: ```c 函数类型 函数名 (数据类型1 形式参数1 ,数据类型2 形式参数2 ,… );...

    二进制讲解函数调用

    在计算机科学中,函数调用是程序执行过程中不可或缺的一部分,它允许我们把一系列相关的操作封装成独立的功能单元,便于重复使用和模块化编程。当我们谈论“二进制讲解函数调用”时,实际上是在探讨在处理器级别上,...

    ARM IAR C / C ++编译器参考指南和IAR链接器和库工具使用介绍

    ### ARM IAR C / C++ 编译器参考指南与 IAR 链接器及库工具使用介绍 #### 概述 本指南主要介绍了如何使用 IAR Embedded Workbench for ARM 的 C 和 C++ 编译器进行编译以及链接工作,并对 IAR 链接器和库工具进行了...

    408函数-递归调用-全局变量和局部变量

    ### 408函数-递归调用-全局变量和局部变量 #### 一、CLion环境下新建文件及函数管理 在CLion环境下新建文件,尤其是C/C++源文件,对于项目的组织和代码的管理非常关键。为了提高编程效率和调试效果,我们需要遵循...

    对C++编译器区分重载函数无任何意义的信息是 A.参数类型B.参数个数.docx

    参数个数”以及描述部分的内容来看,本文将深入探讨C++编程语言中关于函数重载(overloading)的概念及其关键要素,并明确指出在C++编译器如何识别不同重载函数时哪些因素是有意义的。 ### C++函数重载概述 #### ...

    函数的几种调用机制

    例如,对于函数int function(int a, int b),其在使用stdcall调用约定后,编译器会将其命名为_function@8(其中8代表参数总大小为8个字节)。函数调用时的汇编代码将依次将参数压栈,然后调用函数,函数内部通过相对...

    C编译器错误与解决方法

    **问题描述**:函数`DelayX1ms()`虽未被其他函数调用,但编译器仍然为其分配内存空间,增加了程序的负担。 **解决方法**:考虑删除`DelayX1ms()`函数,或者使用条件编译来保留该函数而不实际编译,如使用`#if ... #...

    易语言调用函数编译原理源码

    在content.txt文件中,我们期望找到关于易语言函数调用编译原理的详细源代码解释和示例,这将使我们能够更深入地了解这一过程,并可能为开发自己的编译器或解析器提供启示。通过学习和分析这个源码,我们可以学习到...

    C语言函数调用及定义ppt课件.ppt

    本节课程主要讲解了C语言函数的定义和调用,包括函数的定义、函数的类型、函数的调用、函数的声明、函数的执行等内容。 一、函数的定义 函数是指完成一个特定工作的独立程序模块,可以是库函数,也可以是用户...

    19_函数调用模型_主调函数和被调用函数.zip_C语言

    函数调用模型是C语言程序设计的基础,它定义了如何从一个函数(主调函数)调用另一个函数(被调用函数)。这个模型允许程序员将复杂的问题分解为更小、更易管理的部分,提高代码的可读性和可维护性。 一、函数的...

    (C++课件)第4章__函数定义与调用(函数1)

    函数可以被定义为执行特定任务的代码块,它们可以在程序的不同位置被多次调用,从而提高了代码的重用性和模块化。 4.1 函数的定义与调用 4.1.1 函数概述 C++程序通常包含一个特殊的函数`main()`,它是程序执行的...

    如何keil在c中调用a51汇编函数.doc

    重入函数是一种特殊类型的函数,允许在中断或并发情况下被调用,它们不会使用全局数据,而是依赖于局部变量或者由调用者提供的存储空间。 在C语言源文件(如`testc.c`)中,我们需要声明这些外部函数,这样编译器...

    在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?.docx

    例如,C++编译器可能将函数名`foo`修改为`_Z3fooii`,其中`_Z`表示该函数是C++函数,而`3`表示函数名的长度,`foo`是函数名,`ii`表示函数的参数类型。在这种情况下,C编译器编译后的函数名不会经过名称 mangling,...

    在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?.pdf

    在 C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”? extern "C" 是连接申明(linkage declaration),它告诉编译器,以 C 语言的方式编译和连接变量和函数。这种方式使得 C++ 程序可以调用被 C ...

    单片机设计中C函数和汇编子程序的相互调用及实例

    例如,若`addTwoNumbers`接受两个char类型的参数,且函数原型为`char addTwoNumbers(char a, char b)`,在调用前,应将参数a和b分别置于寄存器A和B中(假设汇编语言中A和B对应于C51中的R0和R1)。然后,通过跳转指令...

    迷你型C++编译器和函数编译手册

    《迷你型C++编译器和函数编译手册》是一个小巧而实用的工具,它集成了C++编程语言的编译环境以及一个便捷的函数速查手册。对于初学者和经验丰富的开发者来说,这都是一个不可多得的资源。下面我们将深入探讨C++...

Global site tag (gtag.js) - Google Analytics