c++,关于#define

为何#difine在函数内部定义常量不会报错,但是输出就有问题了

//2021.9.25 日创建并修改
#include<iostream>
using namespace std;

//常量的定义方式
//1. #define 宏常量(宏常量暂时先记住就行): #define 常量名 常量
//2. const修饰的变量: const 数据类型 常量名 = 常量

//1. #define 宏常量
#define Day 7//#define宏常量写在函数外面

int main() {
    //尝试函数内部用#define宏常量
    #define aaa 3.14;//没有报错
    //输出
    //cout << "圆周率约等于" << aaa << "。" << endl;//为何这里的"<<"会报错"应输入表达式"呢?

    //如果想修改常量。。。
    //Day = 14;    //报错,因为Day是常量,一旦修改就会报错(报错内容:表达式必须是可修改的左值)
                                                                //左值:等号左边的值(应该吧)

    //输出下试试
    cout << "一周总共有:" << Day << " 天" << endl;

    //2. const修饰变量
    const int month = 12;//const修饰的常量写在函数内部
    //month = 24;//尝试修改会报错x

    system("pause");

    return 0;
}

#define 宏是被预处理器处理的,直接进行文本替换
用 #define aaa 3.14; 定义常量时后面不要写 ; 分号
不然 ; 分号会作为常量内容的一部分,
这样编译时。代码中的aaa会被替换为常量内容,变成:

cout << "圆周率约等于" << 3.14; << "。" << endl;

3.14之后就多了; 就报错了

如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮

const修饰的常量不能直接修改。

void main()
{
    const int cnum=10;
    printf("cnum=%d\n",cnum);
    //cnum=20;  直接修改会报错 
    *(int*)(&cnum)=30; //可以间接的修改 
    printf("cnum=%d\n",cnum);
}