我在网上遇到了一个Fibonacci程序,并对其中一行代码有疑问。
该程序使用无符号长long整数。
fibn = fib0 + fib1;
if((fibn < 0) || (fibn ULLONG_MAX)){
puts("\nOverflow\n");
当然,纤维&lt;对于无符号长long整数,0没有意义,但我的问题是关于(fibn ULLONG_MAX)。没有比较运算符 - 它在测试什么?
我的编译器gcc将其标记为&#34; fibn不是函数或指针。&#34;原始程序声明它是在MS Visual C ++ 08上编译的。
这行代码如何工作,是否是良好的编程习惯?
答案 0 :(得分:0)
简单地说,代码无效。 fibn < 0
永远不会成立,因为fibn
是未签名的,任何合理竞争的编译器都会警告你。
fibn ULLONG_MAX
无效,因为它们之间没有比较器。唯一有理由的是fibn == ULLONG_MAX
,这是一个几乎无用的比较,因为如果fibn
超过ULLONG_MAX
,它将会回滚。
您实际做的是检查fibn
是否小于fib1
以确定是否发生了环绕。
答案 1 :(得分:0)
这行代码如何工作,是否是良好的编程习惯?
它不起作用,String constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
fileName +
";Extended Properties='Excel 12.0 XML;';";
OleDbConnection con = new OleDbConnection(constr);
OleDbCommand oconn = new OleDbCommand("Select * From [" + sheetName + "$]", con);
con.Open();
OleDbDataAdapter sda = new OleDbDataAdapter(oconn);
dtTemp.Reset();
dtTemp.TableName = userUpload;
sda.Fill(dtTemp); //Puts imported table into the dtTemp table
con.Close();
string fields = "";
string tempString;
foreach (DataColumn col in dtTemp.Columns) //Generates SQL String from imported table
{
tempString = RemoveSpecialCharacters(col.ColumnName);
if (dtTemp.Columns.IndexOf(col) == dtTemp.Columns.Count - 1)
{
fields += " [" + tempString + "] varchar(255)";
}
else
{
fields += " [" + tempString + "] varchar(255)" + ",";
}
}
fields = fields.Trim();
// createSQLConn(fields, connection, connectionTempDB, dtTemp);
}
很可能在翻译中丢失。
正如您所注意到的,将与
>
和unsigned long long
进行比较是没用的。如果配置了正确的警告级别,编译器会将这些比较标记为具有常量结果。
该程序只是一个没有经验的程序员在一个甚至没有正确显示代码的网站上发布的尝试。留下来,你将从stackoverflow中学到更多东西。