函数名与变量名的相同的错误

时间:2023-01-11 22:25:38
我今天编了个程序,发现只要函数名与变量名同名就会出错!我就在编了个小程序进行试验
#include "stdafx.h"
#include<iostream>
using namespace std;

int f1(int);

int main(int argc, char* argv[])
{
int f1;
cin>>f1;
cout<<f1(f1);
return 0;
}

int f1(int x)
{
return x+x;
}
显示rror C2064: term does not evaluate to a function。
但把名字随便一改又可以,麻烦会的解释下

25 个解决方案

#1


你让编译器怎么判断?
二义性

#2


这也就是为什么出现那些命名规则的一个原因:不冲突。
比如成员变量用m_开头。
函数名大写开头等。

#3


我的习惯是成员函数加后缀下划线,看得清晰 函数名与变量名的相同的错误

#4


引用 3 楼 mstlq 的回复:
我的习惯是成员函数加后缀下划线,看得清晰

我也曾经考虑过这种命名方式,但从视觉上不够优雅。
比如:
A* a_;
a_->Func();

其中, _->看起来不爽。
记得有一个牛人推荐这种成员变量的命名风格,忘了是谁了...

#5


哦,好像是Exceptional C++的作者。

#6


a_->//眨眼睛了,多俏皮

#7


这个真是各有各的习惯,我看到有函数首字母大写的,首字母小写的。自己保持一种风格就好吧。

#8


很有想象力啊。
你这么一说,看起来比原来舒服多了!
函数名与变量名的相同的错误

#9


骆驼命名法   

成员变量  a_ 

函数  oneFuncForSomething

#10


看到前缀后缀就不爽,但还得加。

#11


标志符 问题.....编译器没法识别...

#12


函数名大写开头???
应该是类名大写开头哦!!!
函数名开头是动词,变量名一般是名词。

引用 2 楼 loaden 的回复:
这也就是为什么出现那些命名规则的一个原因:不冲突。
比如成员变量用m_开头。
函数名大写开头等。

#13


连命名规格都搞不清楚,好好看书吧。

#14


没必要这么玩

#15


把精力用在别的研究上、

#16


这个没必要试,没意义.

#17


这个就像规则一样,违犯就错,编译器不能识别。

#18


引用 12 楼 lovesi3344 的回复:
函数名大写开头???
应该是类名大写开头哦!!!
函数名开头是动词,变量名一般是名词。

引用 2 楼 loaden 的回复:
这也就是为什么出现那些命名规则的一个原因:不冲突。
比如成员变量用m_开头。
函数名大写开头等。

命名规则不必较真,每个人的习惯不一样,不同系统的命名规范也不一样.
windows较多的是单词首字母大写分割单词,linux则是小写+下划线,这个也不是绝对的,实际上你自己爱怎么写就怎么写,主要是自己保持风格就行.

我的习惯是类名加T前缀入TString,函数是首字母大写分割,成员变量+F前缀,如FFileName,你总不能说我这么命名的规则就是错误的吧. 函数名与变量名的相同的错误
实际上我的命名规则是根据我常用的ide风格保持一致的 函数名与变量名的相同的错误

#19


谢谢大家

#20


因为函数名可以当成该函数的函数指针来使用,跟数组名在这方面有些类似
int f1; 
cin>>f1; 
cout < <f1(f1); //这里编译器无法判断参数里的f1是int还是int(*)(int)
return 0; 

#21


还是注意命名吧

#22


引用 15 楼 chongchong001 的回复:
把精力用在别的研究上、


比如,魔兽??O(∩_∩)O~

#23


嗯,到了链接级别无论是全局变量名还是函数名都是符号,都表示一个地址,没有区别。只不过使用的时候函数是call这个地址,变量是movl从这个地址开始的四个字节。

#24


用匈牙利命名法来命名比较标准的。。。。那样别人看起来也比较容易懂。。。

#25


#include <iostream>
using namespace std;

int f1(int);

int main(int argc, char* argv[])
{
int f1;
cin>>f1;
cout <<::f1(f1);//加上::
return 0;
}

int f1(int x)
{
return x+x;

#1


你让编译器怎么判断?
二义性

#2


这也就是为什么出现那些命名规则的一个原因:不冲突。
比如成员变量用m_开头。
函数名大写开头等。

#3


我的习惯是成员函数加后缀下划线,看得清晰 函数名与变量名的相同的错误

#4


引用 3 楼 mstlq 的回复:
我的习惯是成员函数加后缀下划线,看得清晰

我也曾经考虑过这种命名方式,但从视觉上不够优雅。
比如:
A* a_;
a_->Func();

其中, _->看起来不爽。
记得有一个牛人推荐这种成员变量的命名风格,忘了是谁了...

#5


哦,好像是Exceptional C++的作者。

#6


a_->//眨眼睛了,多俏皮

#7


这个真是各有各的习惯,我看到有函数首字母大写的,首字母小写的。自己保持一种风格就好吧。

#8


很有想象力啊。
你这么一说,看起来比原来舒服多了!
函数名与变量名的相同的错误

#9


骆驼命名法   

成员变量  a_ 

函数  oneFuncForSomething

#10


看到前缀后缀就不爽,但还得加。

#11


标志符 问题.....编译器没法识别...

#12


函数名大写开头???
应该是类名大写开头哦!!!
函数名开头是动词,变量名一般是名词。

引用 2 楼 loaden 的回复:
这也就是为什么出现那些命名规则的一个原因:不冲突。
比如成员变量用m_开头。
函数名大写开头等。

#13


连命名规格都搞不清楚,好好看书吧。

#14


没必要这么玩

#15


把精力用在别的研究上、

#16


这个没必要试,没意义.

#17


这个就像规则一样,违犯就错,编译器不能识别。

#18


引用 12 楼 lovesi3344 的回复:
函数名大写开头???
应该是类名大写开头哦!!!
函数名开头是动词,变量名一般是名词。

引用 2 楼 loaden 的回复:
这也就是为什么出现那些命名规则的一个原因:不冲突。
比如成员变量用m_开头。
函数名大写开头等。

命名规则不必较真,每个人的习惯不一样,不同系统的命名规范也不一样.
windows较多的是单词首字母大写分割单词,linux则是小写+下划线,这个也不是绝对的,实际上你自己爱怎么写就怎么写,主要是自己保持风格就行.

我的习惯是类名加T前缀入TString,函数是首字母大写分割,成员变量+F前缀,如FFileName,你总不能说我这么命名的规则就是错误的吧. 函数名与变量名的相同的错误
实际上我的命名规则是根据我常用的ide风格保持一致的 函数名与变量名的相同的错误

#19


谢谢大家

#20


因为函数名可以当成该函数的函数指针来使用,跟数组名在这方面有些类似
int f1; 
cin>>f1; 
cout < <f1(f1); //这里编译器无法判断参数里的f1是int还是int(*)(int)
return 0; 

#21


还是注意命名吧

#22


引用 15 楼 chongchong001 的回复:
把精力用在别的研究上、


比如,魔兽??O(∩_∩)O~

#23


嗯,到了链接级别无论是全局变量名还是函数名都是符号,都表示一个地址,没有区别。只不过使用的时候函数是call这个地址,变量是movl从这个地址开始的四个字节。

#24


用匈牙利命名法来命名比较标准的。。。。那样别人看起来也比较容易懂。。。

#25


#include <iostream>
using namespace std;

int f1(int);

int main(int argc, char* argv[])
{
int f1;
cin>>f1;
cout <<::f1(f1);//加上::
return 0;
}

int f1(int x)
{
return x+x;