首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 條件編譯 #ifdef 報錯「unterminated #ifdef」?拼寫錯誤是元兇

     編輯:程式設計綜合問答

錯誤信息

error: unterminated #ifdef

代碼片段

// time.h
#ifdef _TIME_H   // ← 此處寫成了 #ifdef
#define _TIME_H
class Time { ... };
// #endif        // ← 此處被註釋

根因分析

  • 預處理器指令**嚴格區分大小寫**:必须是 `#ifndef`(if not defined),而非 `#ifdef`。
  • 代碼中寫的是 `#ifdef _TIME_H`,意圖是「若未定義則定義」,實際語義變成「若已定義則進入」,且缺少對應的 `#endif`(被註釋),導致預處理器以為 `#ifdef` 塊未結束。

標準護衛宏寫法

// time.h
#ifndef _TIME_H   // 正確:if not defined
#define _TIME_H

class Time {
private:
    int hour, minute, second;
public:
    Time();
    void set_time(int h, int m, int s);
    void show_time();
};

#endif  // 必須配對,不能註釋

補充:#pragma once 現代替代方案

// time.h
#pragma once  // 編譯器自動防止重複包含,支持 MSVC/GCC/Clang

class Time { ... };

優點:無需手寫宏名、避免宏名衝突、編譯速度略快。缺點:極少數舊編譯器不支持(如 GCC 3.4 以前)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved