在下面的代码片段中,myGlobalInt
变量是unsigned long int
。我在Embarcadero C ++ Builder中运行此代码。
第一个ShowMessage()
弹出窗口正确显示myGlobalInt
的值,并且大于86399
。但是,ShowMessage()
语句中的if
永远不会触发。
ShowMessage(myGlobalInt);
if (myGlobalInt > 86399) {
ShowMessage("Job timer stops at 24 hours.");
}
修改:下面显示了所有相关代码,以便您可以重复并希望验证我的结果。这是在Embarcadero RAD Studio 10.2 Tokyo中使用简单的多设备C ++应用程序构建的。
在Project.cpp
文件中,我有以下相关代码,就在include:
//---- Global variables ---
unsigned long int myGlobalInt; // used to track seconds
int jobInt; // used to track which job is accruing time
在我的一个表单的Unit.cpp
文件中,我在包含之后有以下代码:
extern unsigned long int myGlobalInt; // seconds counter
extern int jobInt; // which job is accruing time
启用后,表格I在表格上的使用每1秒触发一次。它有以下相关代码:
myGlobalInt++; // eventually this exceeds 86,399.
ShowMessage(myGlobalInt);
if (myGlobalInt > 86399UL) {
ShowMessage("Job timer stops at 24 hours.");
}
如果UL
字面上没有86399
后缀,则"Job timer stops at 24 hours."
消息永远不会发生。
修改:根据建议,我创建了一个简单的控制台代码,如下所示。但是,这段代码工作正常 - 没有UL
后缀!
#include <tchar.h>
#include <iostream.h>
#include <stdio.h>
int main(int argc, _TCHAR* argv[])
{
int goofy;
unsigned long int myGlobalInt = 90000;
if (myGlobalInt > 86399) {
std::cout << "Big number";
}
std::cin >> goofy; //this is just to hold the console open
return 0;
}
我的原始问题(通过将UL
放在86399
文字的末尾来修复)必须与我将unsigned long int
声明为全局变量这一事实有关(在Project.cpp
文件中,然后将其带入我的Unit.cpp
,以便与extern
代码一起使用。
答案 0 :(得分:-2)
好吧,我认为问题在于编译器无法从上下文中判断86399文字应该被视为无符号长整数。阅读&#34;整数&#34;在下面的第8页,我决定尝试添加&#34; UL&#34;到86399年底:http://helpcentreonline.com/article/primitiv_console_bcc.pdf
这很有效,代码现在正常运行。这是最终版本:
ShowMessage(myGlobalInt);
if (myGlobalInt > 86399UL) {
ShowMessage("Job timer stops at 24 hours.");
}
希望这有助于下一个新手。 ; - )