为什么Visual Studio编译器说我在C++函数中缺少分号?

dan*_*007 2 c++ macros

这是我的功能.width和height变量是在此函数上定义的全局整数变量,其值为数百.

#define ORIGINAL_WIDTH 800;
#define ORIGINAL_HEIGHT 700;

void set_perspective(void) {
  int view_width, view_height;
  if (width < height) {
    view_width = width;
    view_height = (float) width * ORIGINAL_HEIGHT / ORIGINAL_WIDTH;
  }
  else {
    view_width = (float) height * ORIGINAL_WIDTH / ORIGINAL_HEIGHT;
    view_height = height;
  }
}
Run Code Online (Sandbox Code Playgroud)

我的C++编译器注意到"错误C2143:语法错误:缺少';' 在'/'之前:

view_height = (float) width * ORIGINAL_HEIGHT / ORIGINAL_WIDTH;
and 
view_width = (float) height * ORIGINAL_WIDTH / ORIGINAL_HEIGHT;
Run Code Online (Sandbox Code Playgroud)

这与铸造有关吗?为什么在某处丢失分号?感谢您的时间.

das*_*ght 13

这是因为你的分号中有分号#define.它应该是这样的:

#define ORIGINAL_WIDTH 800
#define ORIGINAL_HEIGHT 700
Run Code Online (Sandbox Code Playgroud)

#define 执行文字文本替换,因此您的行对于编译器看起来像这样:

view_height =(float)width*800;/700 ;;


And*_*adt 8

避免使用宏(这是文本替换)并使用常量,这个问题不可能发生.

static const int ORIGINAL_HEIGHT = 800;
static const int ORIGINAL_WIDTH = 700;
Run Code Online (Sandbox Code Playgroud)