本指令为特殊用途指令,用于开启或关闭某些功能。这些类型的指令是特定于编译器的,也就是说,它们因编译器而异。下面讨论了一些#pragma指令:
null
- #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()
- #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”。
- #布拉格毒药 :此指令受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"); ^
- #pragma GCC依赖项 :pragma GCC依赖项允许您检查当前文件和其他文件的相对日期。如果另一个文件比当前文件更新,则会发出警告。如果当前文件是从另一个文件派生的,并且应该重新生成,这将非常有用。
语法 :
#pragma GCC dependency "parse.y" #pragma GCC dependency "/usr/include/time.h" rerun fixincludes
- #pragma GCC系统_头 :这个pragma不带参数。它使当前文件中的其余代码被视为来自系统头。
- #布拉格语一次 :pragma once指令有一个非常简单的概念。包含此指令的头文件只包含一次,即使程序员在编译过程中多次包含它。这不包括在任何ISO C++标准中。该指令的工作原理类似于#include-guard成语。使用#pragma一次可以避免程序多次包含优化。
语法:
#pragma once
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END