C++宏重复定义问题

// A.cpp
#include <iostream>

#define MAX_PATH 260
#include "B.h"
using namespace std;

int main()
{
    B b;
    cout << sizeof(b.path) << endl;
    cout << getPathLength() << endl;
    return 0;
}
// B.cpp
#include "B.h"

int getPathLength()
{
    return sizeof(path);
}
// B.h
#ifndef B_H
#define B_H

#ifndef MAX_PATH
#define MAX_PATH 256
#endif

class B
{
public:
    char path[MAX_PATH];
    int getPathLength();
}

#endif

请问解释为什么输出是:
260
256

阅读 2.2k
1 个回答

因为你定义了 #define MAX_PATH 260 在A.cpp中,所以 sizeof(b.path) 返回的是字符数组的大小为 260。而 B.cpp 中定义的 getPathLength() 函数中的 MAX_PATH 变量被替换为了 256,因此 getPathLength() 返回的就是该字符串的长度,所以是 256了。

这个问题其实很简单,你可以多学习下基本的断点调试,根据变量的变化规律基本就能找到其中的问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题