#error和#line

編譯預處理

專題三:編譯預處理。包括以下章節:

  • 編譯過程簡介
  • 宏定義與宏使用分析
  • 條件編譯使用分析
  • #error和#line
  • #pragma預處理分析
  • #和##運算符使用解析

#error用法

  • #error用於生成一個編譯錯誤消息,並停止編譯
  • 用法:#error message(message不需要使用雙引號)
  • #weaning用於生成一個編譯警告信息,不會停止編譯
  • 用法:#weaning message(message不需要使用雙引號)

實例分析4-1

4-1.c

#include <stdio.h>

#define CONST_NAME1 "CONST_NAME1"
#define CONST_NAME2 "CONST_NAME2"

int main()
{
#ifndef COMMAND
#warning Compilation will be stoped ...
#error No defined Constant Symbol COMMAND
#endif

    printf("%s\n", COMMAND);
    printf("%s\n", CONST_NAME1);
    printf("%s\n", CONST_NAME2);

    return 0;
}

結果:
這裏寫圖片描述

#line用法

  • #line用於強制指定新的行號和編譯文件名,並對源程序的代碼重新編號
  • #line編譯指示字的本質是重定義_LINE__FILE_
  • 用法: #line number filename(filename可省略)

實例分析4-2

4-2.c


#include <stdio.h>


#define CONST_NAME1 "CONST_NAME1"
#define CONST_NAME2 "CONST_NAME2"


int f();
int main()
{
    printf("%s\n", CONST_NAME1);
    printf("%s\n", CONST_NAME2);
    printf("%d\n", __LINE__);
    printf("%s\n", __FILE__);

    f();

    return 0;
}

//作用:一個文件可能由不同的程序員完成。不同程序員可以定義不同的行,不同的文件名,便於找到誰寫的代碼,多少行出錯
#line 1 "Hello.c"
int f()
{
    a+b,
}

結果:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章