加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

这些编译器指令有什么区别?

发布时间:2020-12-16 10:38:44 所属栏目:百科 来源:网络整理
导读:这些指令之间的区别是什么? #ifdef FOO#if defined FOO#if defined(FOO) 我正在使用CCS编译器,但我也对其他C编译器感兴趣. 解决方法 从我所看到的,#if定义的主要用途是在一行上检查多个宏定义.否则,对于单宏定义条件,据我所知它们是相同的. #include stdio.
这些指令之间的区别是什么?

#ifdef FOO

#if defined FOO

#if defined(FOO)

我正在使用CCS编译器,但我也对其他C编译器感兴趣.

解决方法

从我所看到的,#if定义的主要用途是在一行上检查多个宏定义.否则,对于单宏定义条件,据我所知它们是相同的.

#include <stdio.h>
int main()
{
#if defined(FOO) && defined(BAR)
    printf("foobar!n");
#else
    printf("nothing.n");
#endif
    return 0;
}
$tcc -DFOO -run a.c 
nothing.
$tcc -DBAR -run a.c 
nothing.
$tcc -DFOO -DBAR -run a.c 
foobar!

此外,上述程序使用gcc -Wall -ansi ac进行编译,因此建议#if定义为正确的ANSI C.此外,this ANSI C summary from 1987列出#if定义为ANSI标准下预处理器的新定义行为 – 这应该是任何标准的您将使用符合ANSI标准的编译器.

如果您没有使用#if定义,那么您必须这样做

#ifdef FOO
#ifdef BAR
    printf("foobar!n");
#endif /* BAR */
#endif /* FOO */

此外,the Redhat manual for the C preprocessor说

#if defined MACRO is precisely equivalent to #ifdef MACRO.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读