该指令是一种特殊用途的指令,用于打开或关闭某些功能。这类指令是特定于编译器的,即它们随编译器的不同而不同。下面讨论了一些#pragma指令:
- #pragma startup和#pragma exit :这些指令可帮助我们指定程序启动之前(控件传递到main()之前)和程序退出之前(控件从main()返回之前)所需运行的功能。 。
注意:以下程序不适用于GCC编译器。
看下面的程序:#include
void func1(); void func2(); #pragma startup func1 #pragma exit func2 void func1() { printf("Inside func1()\n"); } void func2() { printf("Inside func2()\n"); } int main() { printf("Inside main()\n"); return 0; } 输出:Inside func1() Inside main() Inside func2()
在GCC编译器上运行时,上面的代码将产生以下给出的输出:
Inside main()
发生这种情况是因为GCC不支持#pragma启动或exit 。但是,您可以将以下代码用于GCC编译器上的类似输出。
#include
void func1(); void func2(); void __attribute__((constructor)) func1(); void __attribute__((destructor)) func2(); void func1() { printf("Inside func1()\n"); } void func2() { printf("Inside func2()\n"); } int main() { printf("Inside main()\n"); return 0; } 输出:Inside func1() Inside main() Inside func2()
- #pragma warn指令:此指令用于隐藏在编译过程中显示的警告消息。当我们有一个大型程序并且我们想在查看警告之前解决所有错误时,这对我们可能很有用,然后使用它可以通过隐藏所有警告来专注于错误。我们可以通过在语法上稍作更改再次使警告可见。
语法:
#pragma warn +xxx (To show the warning) #pragma warn -xxx (To hide the warning) #pragma warn .xxx (To toggle between hide and show)
我们可以隐藏警告,如下所示:
- 的#pragma警告-rvl:这个指令皮革时应该返回一个值的函数没有返回值被上调的警告。
- #pragma warn -par :此伪指令隐藏那些在函数不使用传递给它的参数时引发的警告。
- #pragma warn -rch :此伪指令将隐藏无法访问代码时发出的警告。例如:在函数的return语句之后编写的任何代码均不可访问。
范例:
// Example to explain the working of // #pragma warn directive // This program is compatible with C/C++ compiler #include
#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
上面的程序编译成功,没有任何警告,输出为“ GEEKSFORGEEKS”。
- #pragma GCC毒物:GCC编译器支持此伪指令,该伪指令用于从程序中完全删除标识符。如果要阻止标识符,则可以使用#pragma GCC毒药指令。
范例:
// Program to illustrate the // #pragma GCC poison directive #include
#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"); ^
- #pragma GCC依赖项:#pragma GCC依赖项允许您检查当前文件和另一个文件的相对日期。如果另一个文件比当前文件更新,则发出警告。如果当前文件是从另一个文件派生的,并且应该重新生成,这将很有用。
语法:
#pragma GCC dependency "parse.y" #pragma GCC dependency "/usr/include/time.h" rerun fixincludes
- #pragma GCC system_header :此编译指示不带任何参数。它导致将当前文件中的其余代码视为来自系统头文件。
- #pragma Once :#pragma Once指令具有非常简单的概念。即使程序员在编译过程中多次包含该指令,头文件也仅包含一次。这不包含在任何ISO C++标准中。该指令的工作方式与#include保护器惯用语相似。使用#pragma可以使程序避免多次包含优化。
句法:
#pragma once
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。