宏定义中出现分号的问题


#include 

#define PI 3.14159
#define PI2 2*PI 
#define PRT printf ("%f\n",PI); \
            printf ("%f\n",PI2)

int main(int argc, char const *argv [])
{
    PRT;
    //printf (PI);
    return 0;
}

为什么第五行printf后面要加";"分号,不是说宏不是C语句,不用加分号嘛?

PRT里定义了2个print,不是一个,你不加分号的话,不成语法错误了?
你看后一个print就没有加分号,否则替换完后面会跟2个分号

不是第5行,是第7行printf没有没加分号,宏定义只是将你后面的内容换了个描述的名称,编译器在编译程序的时候会把你宏定义对应的内容替换进去在编译的,比如你的宏PI,你在代码里面可以这么写,编译程序的时候会把所有的PI替换成3.14159的,所以语法都要对应