C预处理器和if-else条件语句

Nan*_* HE 3 c++ if-statement visual-studio-2010 c-preprocessor

我在vs2010(win32控制台应用程序)中运行我的C代码.它被编译为C++应用程序.

#include "stdafx.h"

#define     YES     1;
#define     NO      0;

// function to determine if an integer is even
int isEven(int number)
{
    int answer;

    if ( number % 2 == 0)
        answer = YES;
    else
        answer = NO;    
    return answer;

}

int main()
{
    int isEven(int number);

    if (isEven(17) == YES)
        printf("yes "); 
    else
        printf("no ");


    if ( isEven(20) == YES)
        printf("yes\n");
    else
        printf("no\n");

     return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译错误如下.

p300.cpp(18): error C2181: illegal else without matching if
p300.cpp(30): error C2143: syntax error : missing ')' before ';'
p300.cpp(30): error C2059: syntax error : ')'
p300.cpp(31): warning C4390: ';' : empty controlled statement found; is this the intent?
p300.cpp(33): error C2181: illegal else without matching if
p300.cpp(37): error C2143: syntax error : missing ')' before ';'
p300.cpp(37): error C2059: syntax error : ')'
p300.cpp(38): warning C4390: ';' : empty controlled statement found; is this the intent?
p300.cpp(40): error C2181: illegal else without matching if
Run Code Online (Sandbox Code Playgroud)

然后我也尝试{ }为每个if-else条件语句插入几个,但代码仍然编译失败.我的代码出了什么问题?

Ste*_*hen 6

编译错误是由于您的#define语句上的分号.删除它们.

#define是预处理器宏,而不是c语法.它不需要分号.预处理器直接替换on YESNO,这使得:

if ( number % 2 == 0)
    answer = YES;
else
    answer = NO;
Run Code Online (Sandbox Code Playgroud)

变成:

if ( number % 2 == 0)
    answer = 1;;  // <-- Notice the two semicolons!
else
    answer = 0;;
Run Code Online (Sandbox Code Playgroud)

这在if和else之间产生两个语句,因此编译错误随之而来.我怀疑你会得到不同的编译器错误当您添加{}

if (isEven(17) == YES)
Run Code Online (Sandbox Code Playgroud)

变得

if (isEven(17) == 1;)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这个问题被标记c,但你的文件名是.cpp,这是c ++的常见后缀.如果您使用的是c ++,请务必使用该bool类型.

bool is_even = true;
bool is_odd = false;
Run Code Online (Sandbox Code Playgroud)