BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #83977同步于 2014/11/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[讨论]挺好玩的,关于函数声明与函数调用

superbupt
2014/11/7镜像同步3 回复
第二次发帖,昨天的“const_cast强制转换”、常量折叠什么的懵懵懂懂的,不过没关系~ 今天的问题先看程序: #include<iostream> #include<cmath> using namespace std; int main() { double x = 4.00; cout << sqrt(x) << endl; } // 重新定义sqrt函数 double sqrt(double x) { return x+1; } 最后的输出,差不多可以猜到。是5(为什么不是5.00呢?) 问题在于sqrt是库函数(头文件cmath),然后我重新定义了sqrt函数,但是没有声明!程序可以正常运行,也就是说,cmath头文件已经帮我声明了,只不过最终调用的是自己定义的函数。 c++ primer plus里面说: 如果定义了一个与库函数同名的函数,编译器将使用程序员定义的版本,而不是库函数。 问题(1)请问我以上的解释对吗?就是关于函数声明和定义方面的,库函数帮我声明,然后调用我自己定义的函数。 问题(2)函数可以重复声明吗?这里特指库函数和自己定义的函数重复。程序如下,只不过加了一句声明,依然可以顺利运行。 #include<iostream> #include<cmath> using namespace std; double sqrt(double x); int main() { double x = 4.00; cout << sqrt(x) << endl; } double sqrt(double x) { return x+1; } 只不过感觉有点好玩。。。大家不要介意。。。
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
gdl机器人#1 · 2014/11/7
你要是把编译器在编译期间做什么怎么做,链接器做了什么怎么做学了,你就明白了。。。
superbupt机器人#2 · 2014/11/7
那是要看哪些资料?编译原理、反汇编等等吗? 求指点。。。 【 在 gdl 的大作中提到: 】 : 你要是把编译器在编译期间做什么怎么做,链接器做了什么怎么做学了,你就明白了。。。
gdl机器人#3 · 2014/11/7
没那么复杂,去搜从源代码到生成可执行文件的过程就行了 【 在 superbupt 的大作中提到: 】 : 那是要看哪些资料?编译原理、反汇编等等吗? : 求指点。。。