C++ 宏/定义在C+中是否区分大小写+;?

C++ 宏/定义在C+中是否区分大小写+;?,c++,C++,假设您有一个名为Add.h的头文件。如果有,程序会链接吗 #ifndef ADD_H #define Add_H 你的警卫包括在内吗 编辑: 头文件 #include <iostream> using namespace std; #ifndef _RATIONAL_H #define _Rational_H class Rational { long long _p; long long _q; void simp(); public: Rati

假设您有一个名为Add.h的头文件。如果有,程序会链接吗

#ifndef ADD_H
#define Add_H
你的警卫包括在内吗

编辑: 头文件

#include <iostream>
using namespace std;
#ifndef _RATIONAL_H
#define _Rational_H

class Rational
{
    long long _p;
    long long _q;
    void simp();
public:
    Rational();
    Rational( long long P, long long Q = 1);
    Rational( const Rational& );
};
#endif
#包括
使用名称空间std;
#如果没有理性
#定义理性
类理性
{
隆隆!;
隆隆!;
void simp();
公众:
有理();
有理(长P,长Q=1);
理性(constrational&);
};
#恩迪夫

> p>是的,宏在C++中是区分大小写的。假设大多数编程语言中的所有内容都是区分大小写的,这可能是一条很好的经验法则。只有少数几种语言可以访问,例如,
foo
foo
作为同一个变量(我认为是Visual Basic-不确定还有多少其他变量)

如果您对如此简单的内容不确定,最简单的方法是使用您自己的编译器进行尝试:)

编辑:要知道它是否真的起作用,并且链接器并没有忽略它,因为它不一定需要定义(可能发生的情况取决于ifdef逻辑/环境),请尝试以下代码:

#include <iostream>

#define TEST

bool success = false;

#ifdef Test
bool success = true;
#endif

void main() {
    std::cout << success << std::endl;
    system("pause"); //Wait to press enter before closing
}
#包括
#定义测试
布尔成功=假;
#ifdef试验
布尔成功=真;
#恩迪夫
void main(){

是的,一切都是区分大小写的。你的意思是,如果你用它作为包含保护并包含来自多个编译单元的头文件吗?试试看。代码链接是否取决于代码的其余部分…这不是一个你可以通过测试很容易回答的问题吗?这就是问题。我尝试过类似的东西根据我的要求,链接器创建了一个实际工作的可执行文件。有人告诉我它是错误的,它不会链接。我编辑了答案,以包括一个测试,您可以做测试,以测试它是否真的工作。尝试一下,让我们知道它是如何运行的?我尝试运行代码,它显示了一个0。因此它是区分大小写的。如果我有两个不同的条件,比如头文件中的预处理器指令会发生什么?因为在我的例子中,它仍然链接创建一个可执行文件。你能发布头文件的代码吗(以及任何其他相关的头文件-源文件不应该太相关)所以我们可以看一看吗?很难说只使用上面的两行,但正如我所说的,这可能是由于您实现的ifndef逻辑。使用上面发布的两行代码,所发生的一切就是检查是否定义了一个宏,如果是,则定义另一个宏。这实际上根本不会妨碍编译过程,但是t如果您对代码中的其他部分感到困惑,那么我们也有希望对其进行解释。我在最初的帖子中将代码发布到了我的头文件中。因此,它所做的只是在每次将其实现到另一个文件时重新定义自己?