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

    */ 

     

  • 相关阅读:
    halcon知识:区域专题【07】
    Win10系统自带的虚拟机怎么打开教学
    Vue3中无法为el-tree-select设置反选问题分析
    iOS 64位程序调试环境搭建
    多线程查询,效率翻倍
    Linux:安装python
    SpringMVC入门宝典(七)SpringMVC文件上传(下)
    mvn package includes all the dependency jar in pom.xml
    在编程中如何使用数字-python
    nginx错误:unknown directive “锘? in F:\nginx/conf/nginx.conf:3
  • 原文地址:https://blog.csdn.net/weixin_40186813/article/details/125612279