c++ ShellExecute函数在"公共c语言函数的定义与调用运行时支持(/clr)" 时报error LNK2019: 无法解析的外部符号

调用cmath中的sqrt函数定义了一个intm,然後定义doublesqrtm=sqrt(m)报错“有多个重载函数"sqrt"实例与参数列表匹配”,后来发现钱能的C++教程上写的是sqrt(m*)

 

· TA获得超过3.2万个赞

sqrt()的参数须为浮点不可为整数,转换 一下就可以了: sqrt((double)m)

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

     extern是C/C++c语言函数的定义与调用中表明函数和全局变量作用范围(可见性)的keyword该keyword告诉编译器。其声明的函数和变量能够在本模块或其他模块中使用
  通常。在模块的头文件里对本模块提供给其他模块引用的函数和全局变量以keywordextern声明

       比如,假设模块B欲引用该模块A中定义的全局变量和函数时仅仅需包括模块A的頭文件就可以这样,模块B中调用模块A中的函数时在编译阶段,模块B尽管找不到该函数可是并不会报错。它会在连接阶段中从模块A编譯生成的目标代码中找到此函数


  与extern相应的keyword是static。被它修饰的全局变量和函数仅仅能在本模块中使用因此,一个函数或变量仅仅可能被本模块使用时其不可能被extern “C”修饰。
  被extern "C"修饰的变量和函数是依照Cc语言函数的定义与调用方式编译和连接的


  实际上,在连接階段连接器会从模块A生成的目标文件moduleA.obj中寻找_foo_int_int这种符号!

在模块B的实现文件里仍然调用foo( 2,3 ),其结果是:
  (1)模块A编译生成foo的目标代码时没有对其名字进行特殊处理,採用了Cc语言函数的定义与调用的方式;
  (2)连接器在为模块B的目标代码寻找foo(2,3)调用时寻找的是未经改動的符号名_foo。

在Cc语言函数的定义与调用的头文件里对其外部函数仅仅能指定为extern类型。Cc语言函数的定义与调用中不支持extern "C"声明在.c文件里包括了extern "C"时会出现编译语法错误。在C中引用C++c语言函数的定义与调用中的函数和变量时C++的头文件需加入extern "C",可是在Cc语言函数的定义与调用中不能矗接引用声明了extern "C"的该头文件应该仅将C文件里将C++中定义的extern "C"函数声明为extern类型。比如:

这里我汇总了绝大部分北邮BUPT OJ 上的Φ文题中文题也就都是往年题。有从10年开始到14年的所有机试往年题我的博客里有上述文档里所有的题。谁知道怎么降低下载积分现茬看不到这个选项了

我要回帖

更多关于 c语言函数的定义与调用 的文章

 

随机推荐