如果不需要括号,C ++会使用括号吗?

时间:2017-01-20 04:36:32

标签: c++

我遇到了一个我无法弄清楚的问题,我对c ++仍然很陌生。 这是一段代码:

#define secondsInHour 3600;          
#define secondsInMinute 60;

using namespace std;

int main()
{
    int totalSeconds;
    int convertedHours;
    int convertedMinutes;
    int convertedSeconds;

    cout << "Enter time in seconds: ";
    cin  >> totalSeconds;
    cout << endl;

    convertedHours = totalSeconds / secondsInHour;                          
    convertedMinutes = (totalSeconds - (convertedHours*secondsInHour))/secondsInMinute;             //D

    return 0;
}

当我尝试运行时,收到以下错误:预期为')' 谁能解释一下?错误指的是倒数第二行。

编辑:我正在使用Visual Studio 2015.抱歉,我指的是错误的行。产生错误的行是“convertedMinutes = ....”

2 个答案:

答案 0 :(得分:5)

问题在于#define宏中的分号。

当预处理器将宏的文本替换为代码时,编译器看到的代码如下所示:

using namespace std;

int main()
{

int totalSeconds;
int convertedHours;
int convertedMinutes;
int convertedSeconds;

cout << "Enter time in seconds: ";
cin  >> totalSeconds;
cout << endl;

convertedHours = totalSeconds / 3600;;                          
convertedMinutes = (totalSeconds - (convertedHours*3600;))/60;;             //D

return 0;

查看secondsInHour宏中的额外分号如何打破convertedMinutes表达式?

您需要删除分号:

#define secondsInHour 3600    
#define secondsInMinute 60

答案 1 :(得分:5)

此代码:

#define secondsInHour 3600;          
#define secondsInMinute 60;

有以下问题:

  • 你不应该在这种情况下使用#define

  • 如果您使用#define更好地使用大写的MACRO名称以避免冲突

  • 如果您使用#define请勿在末尾添加分号

所以:

const int secondsInHour = 3600;          
const int secondsInMinute = 60;

#define secondsInHour 3600
#define secondsInMinute 60

甚至更好

#define SECONDS_IN_HOUR 3600
#define SECONDS_IN_MINUTE 60

但首选变体是首选,因为它不会给出像这样的意外惊喜