#error和#line

#error和#line

1.#error和#warning
  1. 用法:#error message(不需要双引号包围)
  2. 作用:#error自定义生成一个编译错误消息,并立即停止编译,#warning生成编译警告,不会停止编译。
  3. 示例:
#define NAME1 "NAME1"
#define NAME2 "NAME2"
//#define COMMAND "Hello"

int main()
{
    #ifdef COMMAND  //根据自己的需要条件定义的COMMAND
    #warning Complation will be stopped
    #error No Defined Constant symbol COMAND
    #endif

    printf("%s\n", COMMAND);
    printf("%s\n", NAME1);
    printf("%s\n", NAME2);
    return 0;
}
  • linux下测试:
    gcc -DCOMMAND=”hello” filename.c -o filename
2.#line
  1. 用法:#line number filename(可省略filename)
  2. 作用:强制指定新的行号和编译文件名,并对源程序的代码重新编号(实际中只是想做到无关,因为在一个程序中,也许前面的代码是别人写的,后面是你写的,这时候就可以进行查错)(这种方式目前已经被淘汰)
  3. 说明:本质上是重定义__LINE____FILE__
  4. 示例:
#include <stdio.h>

#line 14 "hello.c"

#define NAME1 "NAME1"
#define NAME2 "NAME2"

void f()
{
    return 0;  //错误代码,测试程序
}

int main()
{
    printf("%s\n", NAME1);
    printf("%s\n", NAME2);
    printf("%d\n", __LINE__);
    printf("%s\n", __FILE__);

    f();

    return 0;
}
  • 结果:(原文件名”test.c”)
    linux下编译:gcc test.c -o test

    hello.c: In function ‘f’:
    hello.c:20:9: warning: ‘return’ with a value, in function returning void

  • 分析:

    1.程序的#line 14 "hello.c"告诉编译器,此程序改为hello.c
    2.并且从下一行开始为指定的第14行
    3.可以将f函数的return注释掉,查看终端的显示有27,然而原来的行为17

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值