• 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;
    }
    /* 输出:

    */ 

     

  • 相关阅读:
    LeetCode:第305场周赛【总结】
    Docker镜像文件介绍启动tomcat
    大家介绍一篇学生选课系统的设计与实现
    MySQL高可用九种方案
    ASP.NET基于Ajax+Lucene构建搜索引擎的设计和实现(源代码+论文)
    《最新出炉》系列初窥篇-Python+Playwright自动化测试-39-highlight() 方法之追踪定位
    validator库的使用详解
    Spring Cloud 综述
    Istio服务网格详解
    vite+vue3+ts开发web日语项目,支持主题切换,pinia状态持久化管理
  • 原文地址:https://blog.csdn.net/weixin_40186813/article/details/125612279