• C和指针 第14章 预处理器 14.5 其他指令


    14.5 其他指令
        当程序编译之后,#error指令允许生成错误信息。下面是它的语法:
        #error text of error message
        下面的代码段显示了可以如何使用这个指令:
        #if defined( OPTION_A )
            stuff needed for option A
        #elif defined( OPTION_B )
            stuff needed for option B 
        #elif defined( OPTION_C )
            stuff needed for option C
        #else
            #error No option selected
        #endif

    /*
    ** 其他指令。 
    */
    #include <stdio.h>
    #include <stdlib.h>

    int main( void ){
        #if defined( OPTION_A )
            printf( "OPTION_A is defined.\n" ); 
        #elif defined( OPTION_B )
            printf( "OPTION_B is defined.\n" );
        #elif defined( OPTION_C )
            printf( "OPTION_C is defined.\n" );
        #else
            #error No option selected!
        #endif    
        return EXIT_SUCCESS;
    }
    /* 输出:

    */ 

        另外还有一种用途较小的#line指令,它的形式如下:
        #line number "string"
        它通知预处理器number是下一行输入的行号。如果给出了可选部分“string”,预处理器就把它作为当前文件的名字。值得注意的是,这条指令将修改__LINE__符号的值,如果加上可选部分,它还将修改__FILE__符号的值。
        这条指令最常用于把其他语言的代码转换为C代码的程序。C编译器产生的错误可以引用源文件(而不是翻译程序产生的C中间源文件)的文件名和行号。

    /*
    ** #line。 
    */
    #include <stdio.h>
    #include <stdlib.h>

    int main( void ){
        printf( "original __LINE__ = %d, __FILE__ = %s\n", __LINE__, __FILE__ );
        #line 12 "other_instruction_#LINE" 
        printf( "original __LINE__ = %d, __FILE__ = %s\n", __LINE__, __FILE__ );
        
        return EXIT_SUCCESS;
    }
    /* 输出:

    */ 

        #progma指令是另一种机制,用于支持因编译器而异的特性。它的语法也是因编译器而异。有些环境可能提供一些#progma指令,允许一些编译器选项或其他方法无法实现的一些处理方式。例如,有些编译器使用#progma指令在编译过程中打开或关闭清单显示,或者把汇编代码插入到C程序中。从本质上说,#progma是不可移植的。预处理器将忽略它不认识的#progma指令,两个不同的编译器可能以两种不同的方式解释同一条#progma指令。
        最后,无效指令(null directive)就是以#符号开头,但后面不跟任何内容的一行。这类指令只是被预处理简单地删除。下面例子中的无效指令通过把#include与周围的代码分隔开来,凸显它的存在:
        #
        #include<stdio.h>
        #
        我们也可以通过插入空行取得相同的效果。 

    /*
    ** #。 
    */
    #
    #include<stdio.h>
    #
    #include <stdlib.h>

    int main( void ){
        printf( "EOF = %d\n", EOF );
         
        return EXIT_SUCCESS;
    }
    /* 输出:

    */ 

     

  • 相关阅读:
    讲讲项目里的仪表盘编辑器(二)
    JavaWeb_第3章_HTTP&Tomcat&Servlet
    【四】相机标定
    开发工具
    IceRPC之依赖注入>快乐的RPC
    满满干货!手把手教你实现基于eTS的分布式计算器
    【第十一章 List接口常用方法,List的遍历,ArrayList、LinkedList和Vector三者的异同及源码分析】
    喜报 | 博睿数据两项发明专利获得国家知识产权局授权,累计发明专利11项
    企业架构LNMP学习笔记37
    阿里P8大牛手写《分布式系统实战手册》Github一天星标就超78K
  • 原文地址:https://blog.csdn.net/weixin_40186813/article/details/125612279