#C/C中的pragma指令++

本指令为特殊用途指令,用于开启或关闭某些功能。这些类型的指令是特定于编译器的,也就是说,它们因编译器而异。下面讨论了一些#pragma指令:

null
  1. #pragma启动和#pragma退出 :这些指令帮助我们指定在程序启动之前(控件传递到main()之前)和程序退出之前(控件从main()返回之前)需要运行的函数。

    笔记 :下面的程序不能与GCC编译器一起使用。 请看以下节目:

    #include<stdio.h>
    void func1();
    void func2();
    #pragma startup func1
    #pragma exit func2
    void func1()
    {
    printf ( "Inside func1()" );
    }
    void func2()
    {
    printf ( "Inside func2()" );
    }
    int main()
    {
    printf ( "Inside main()" );
    return 0;
    }

    
    

    输出:

    Inside func1()
    Inside main()
    Inside func2()
    

    当在GCC编译器上运行时,上述代码将产生如下所示的输出:

    Inside main()
    

    这是因为GCC不支持 #布拉格启动或退出 。但是,您可以在GCC编译器上使用以下代码进行类似的输出。

    #include<stdio.h>
    void func1();
    void func2();
    void __attribute__((constructor)) func1();
    void __attribute__((destructor)) func2();
    void func1()
    {
    printf ( "Inside func1()" );
    }
    void func2()
    {
    printf ( "Inside func2()" );
    }
    int main()
    {
    printf ( "Inside main()" );
    return 0;
    }

    
    

    输出:

    Inside func1()
    Inside main()
    Inside func2()
    

  2. #pragma警告指令 :此指令用于隐藏编译期间显示的警告消息。当我们有一个大型程序,并且希望在查看警告之前解决所有错误时,这可能对我们很有用,然后通过使用它,我们可以通过隐藏所有警告来关注错误。我们可以通过稍微修改语法再次让警告可见。

    语法 :

    #pragma warn +xxx (To show the warning)
    #pragma warn -xxx (To hide the warning)
    #pragma warn .xxx (To toggle between hide and show)
    

    我们可以隐藏警告,如下所示:

    • #布拉格警告-rvl :本指令隐藏了当本应返回值的函数不返回值时发出的警告。
    • #布拉格警告-标准杆 :此指令隐藏函数不使用传递给它的参数时发出的警告。
    • #布拉格马警告-rch :此指令隐藏无法访问代码时发出的警告。例如:在函数的return语句之后编写的任何代码都是不可访问的。

    实例 :

    // Example to explain the working of
    // #pragma warn directive
    // This program is compatible with C/C++ compiler
    #include<stdio.h>
    #pragma warn -rvl /* return value */
    #pragma warn -par /* parameter never used */
    #pragma warn -rch /*unreachable code */
    int show( int x)
    {
    // parameter x is never used in
    // the function
    printf ( "GEEKSFORGEEKS" );
    // function does not have a
    // return statement
    }
    int main()
    {
    show(10);
    return 0;
    }

    
    

    输出:

    GEEKSFORGEEKS
    

    上述程序在没有任何警告的情况下成功编译,输出为“Geeksforgeks”。

  3. #布拉格毒药 :此指令受GCC编译器支持,用于从程序中完全删除标识符。如果我们想要阻止一个标识符,那么我们可以使用 #布拉格毒药 指令。

    实例 :

    // Program to illustrate the
    // #pragma GCC poison directive
    #include<stdio.h>
    #pragma GCC poison printf
    int main()
    {
    int a=10;
    if (a==10)
    {
    printf ( "GEEKSFORGEEKS" );
    }
    else
    printf ( "bye" );
    return 0;
    }

    
    

    上述程序将给出以下错误:

    prog.c: In function 'main':
    prog.c:14:9: error: attempt to use poisoned "printf"
             printf("GEEKSFORGEEKS");
             ^
    prog.c:17:9: error: attempt to use poisoned "printf"
             printf("bye");
             ^
    
  4. #pragma GCC依赖项 :pragma GCC依赖项允许您检查当前文件和其他文件的相对日期。如果另一个文件比当前文件更新,则会发出警告。如果当前文件是从另一个文件派生的,并且应该重新生成,这将非常有用。

    语法 :

    #pragma GCC dependency "parse.y"
    #pragma GCC dependency "/usr/include/time.h" rerun fixincludes
    
  5. #pragma GCC系统_头 :这个pragma不带参数。它使当前文件中的其余代码被视为来自系统头。
  6. #布拉格语一次 :pragma once指令有一个非常简单的概念。包含此指令的头文件只包含一次,即使程序员在编译过程中多次包含它。这不包括在任何ISO C++标准中。该指令的工作原理类似于#include-guard成语。使用#pragma一次可以避免程序多次包含优化。

    语法:

    #pragma once
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享