为什么这个没有类型的函数仍然有效?
Why does this function without a type still work?
为什么即使我声明了一个没有类型的函数也没有收到错误消息?
如果默认接受 return 类型作为某些类型,这样编写代码是否健康?
如果它已经像这样使用编译器功能,那么我们为什么还要为函数编写 void?
注意:我使用的 Code::Blocks 有一个遵循 c++11 std 的 gnu 编译器,如果它与它有任何关系的话。
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
ProfitDetermine (string str="")
{
int profit=0, outcome=0, income=0, sales=0;
int numberofhc=10, insur=1000000, hccost=2000000, price=3000000;
stringstream (str) >> sales;
outcome = (numberofhc * (insur + hccost));
income = (sales*price);
profit = income - outcome;
cout << "profit is " << profit <<endl;
if (profit < 0)
cout << "lost\n";
else if (profit==0)
cout << "even\n";
else
cout << "profit\n";
}
int main()
{
string sales="";
cout << "enter the number of sales\n";
getline(cin,sales);
stringstream (sales) >> sales;
while (sales!="quit") {
ProfitDetermine(sales);
cout << "\n\nEnter the number of sales\n";
cin >> sales;
}
}
Why does this function without a type still work?
该程序在标准 C++ 中的格式不正确。
在某些旧版本的 C 中,类型声明是可选的,类型默认为 int
。 C 编译器将此 "feature" 保留为语言扩展。那些C编译器已经变成了C++编译器,并且仍然保留了语言扩展。
除了格式错误之外,您的程序还有未定义的行为,因为 隐式 的函数 - 通过语言扩展 - 声明为 return int
无法 return 任何值。
is it healthy to write codes like this?
没有
I am using ... gnu compiler
您可以使用 -pedantic
选项要求 GCC 符合标准。当程序格式错误时,您可以使用 -pedantic-errors
选项要求 GCC 编译失败 - 尽管 -fpermissive
选项可能会覆盖它,因此请注意不要使用它。
在 C++ 中,根据 ISO C++ 声明一个没有类型的函数是错误的,但您可以使用“-fpermissive”标志忽略此错误。您的编译器可能会使用此标志来忽略标准编码错误,将它们降级为警告。在声明函数时,您应该始终至少使用 void 类型,以便您的代码符合标准,并且可以被每个程序员和编译器理解。
为什么即使我声明了一个没有类型的函数也没有收到错误消息?
如果默认接受 return 类型作为某些类型,这样编写代码是否健康?
如果它已经像这样使用编译器功能,那么我们为什么还要为函数编写 void?
注意:我使用的 Code::Blocks 有一个遵循 c++11 std 的 gnu 编译器,如果它与它有任何关系的话。
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
ProfitDetermine (string str="")
{
int profit=0, outcome=0, income=0, sales=0;
int numberofhc=10, insur=1000000, hccost=2000000, price=3000000;
stringstream (str) >> sales;
outcome = (numberofhc * (insur + hccost));
income = (sales*price);
profit = income - outcome;
cout << "profit is " << profit <<endl;
if (profit < 0)
cout << "lost\n";
else if (profit==0)
cout << "even\n";
else
cout << "profit\n";
}
int main()
{
string sales="";
cout << "enter the number of sales\n";
getline(cin,sales);
stringstream (sales) >> sales;
while (sales!="quit") {
ProfitDetermine(sales);
cout << "\n\nEnter the number of sales\n";
cin >> sales;
}
}
Why does this function without a type still work?
该程序在标准 C++ 中的格式不正确。
在某些旧版本的 C 中,类型声明是可选的,类型默认为 int
。 C 编译器将此 "feature" 保留为语言扩展。那些C编译器已经变成了C++编译器,并且仍然保留了语言扩展。
除了格式错误之外,您的程序还有未定义的行为,因为 隐式 的函数 - 通过语言扩展 - 声明为 return int
无法 return 任何值。
is it healthy to write codes like this?
没有
I am using ... gnu compiler
您可以使用 -pedantic
选项要求 GCC 符合标准。当程序格式错误时,您可以使用 -pedantic-errors
选项要求 GCC 编译失败 - 尽管 -fpermissive
选项可能会覆盖它,因此请注意不要使用它。
在 C++ 中,根据 ISO C++ 声明一个没有类型的函数是错误的,但您可以使用“-fpermissive”标志忽略此错误。您的编译器可能会使用此标志来忽略标准编码错误,将它们降级为警告。在声明函数时,您应该始终至少使用 void 类型,以便您的代码符合标准,并且可以被每个程序员和编译器理解。