2015-10-20 220 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

相關問題