2015-10-20 86 views
3

假设您有一个名为Add.h的头文件。请问程序链接如果你有在C++中宏/定义是否区分大小写?

#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 
+1

是的,一切都区分大小写。 –

+0

你的意思是,如果你使用它作为你的包含守卫并包含来自多个编译单元的头文件?尝试一下,找出答案。 – David

+0

代码链接是否依赖于代码的其余部分... –

回答

6

是,宏区分用C++敏感。假设大多数编程语言中的所有内容都区分大小写,这可能是一个很好的经验法则。只有少数几种语言可以访问,例如fooFoo作为同一个变量(我正在考虑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 
} 

如果控制台显示的号码1 (std :: cout将true转换为1并将false转换为0,un少你告诉它不这样做),那么宏,事实上,情况敏感

更新:我只是试图编译在Visual Studio 2015年上面的代码,它确实给的0输出。

+0

就是这样。我尝试了类似于我所要求的内容,并且链接器创建了一个实际可用的可执行文件。有人告诉我说这是错误的,它不会链接。 – Genbowl

+0

我已经编辑了答案,以包含可以测试它是否真的起作用的测试。尝试一下,让我们知道它是怎么回事? –

+0

我试着运行代码,它显示一个0.所以它是区分大小写的。如果我对头文件中的预处理器指令有两个不同的条件,会发生什么情况?因为在我的情况下,它仍然链接创建一个可执行文件。 – Genbowl

相关问题