2
A
回答
4
这里是gcc docs
报价本手册记录这是有意义的预处理器本身的编译指示。其他编译指示对C或C++编译器有意义。它们记录在GCC手册中。
据此,有预处理器编译指示和非预处理编译指示。
如何区分预处理器和编译器的指令?
预处理器指令在C标准中指定,编译器指令在编译器手册中有描述。
关于你的编辑,链接页面没有提到#pragma omp
,如果你将它与上面的引用结合起来,我会推断该编译指示不适用于预处理器。这绝对是编译器特有的。
5
gcc -E
只运行预处理器。因此,检查一下输出:留在那里的任何东西都是编译器的注意力。
有了C++的一些经验,您不需要每次都这样做,因为您将了解预处理器的功能以及编译器的功能。由#pragma
控制的一些事情不可能由预处理器完成,所以在这种情况下它必须是编译器指令(或者理论上它可以被预处理器替换为等效的编译器指令 - 如果你关心的话然后差异再次,gcc -E
将显示发生了什么)。然而,#pragma
中的一些与预处理(#pragma once
)有关,因此在这些情况下它必须是预处理器指令。
您的示例#pragma omp
是两个测试的编译器指令。根据一般知识,预处理器并不像代码那样足够聪明。它甚至不理解大多数它看到的C++代码,基本上它可以做的只有整数运算,包括常量,宏替换和铲除文本。对于gcc -E
直接测试请尝试以下文件:
#if 1
#pragma omp
#endif
输出是一些文件名/行号注释加:
#pragma omp
所以我们观察到#if
和#endif
已通过预处理器处理,而#pragma omp
还没有。
相关问题
- 1. RIM编译器支持的预处理器指令
- 2. C#预处理器指令
- 3. Gfortran预处理器指令
- 4. VB.NET预处理器指令
- 5. DDK预处理器指令
- 6. 如何指定库到Xcode链接器和Xcode编译器的预处理器指令?
- 7. 使用C预处理器指令编译时间检查
- 8. C预处理器指令和链接
- 9. 预处理器指令和#error
- 10. 如何使用WiX预处理器编译指示?
- 11. C预处理器与C编译器
- 12. 预处理器指令#error和#warning之间的区别
- 13. 预处理器指令和库之间的区别
- 14. 预处理器指令之间的区别#if和#ifdef
- 15. 如何使用枚举值直接编译预处理器指令
- 16. 如何在整个编译过程中遵循预处理器指令
- 17. OpenMP指令如何通过编译器处理
- 18. 使用预处理器添加编译器命令
- 19. C#预处理器指令(#if和#endif)不起作用。编译错误
- 20. 如何C#编译的#if预处理指令代码?
- 21. 预处理器和转译器有什么区别?
- 22. 预处理器指令:#elif未定义?
- 23. C#预处理器指令范围
- 24. 预处理器指令conio.h C++
- 25. 个人预处理器指令
- 26. 是否有预处理器“AND”指令
- 27. clBuildProgram的多个预处理器指令
- 28. 脚本#预处理器指令?
- 29. nuget库中的预处理器指令
- 30. xib中的预处理器指令?
我指定了问题。这句话是关于杂注omp。 – klm123
@ klm123你选择了添加omp的问题......他的回答是在编辑之前完成的。批评他是不正确的......在他回答的时候,你没有**关于杂注omp的一句话。 – mah
@mah,我是否批评?我通知。 – klm123