【问题标题】:Difference between preprocessor directive #if and normal if预处理器指令#if 和普通 if 之间的区别
【发布时间】:2011-07-07 18:12:19
【问题描述】:

C中的预处理指令#if和普通的if有什么区别?我是C的新手。

【问题讨论】:

  • 你在问预处理器是做什么的吗?你问它是如何工作的?你到底在问什么?
  • 我想知道预处理器是怎么做的!!!

标签: c if-statement c-preprocessor


【解决方案1】:

预处理器if 允许您在将代码发送到编译器之前对其进行条件处理。通常用于阻止头代码被添加两次。

编辑,你的意思是 C++,因为它被标记为这样吗? http://www.learncpp.com/cpp-tutorial/110-a-first-look-at-the-preprocessor/

【讨论】:

  • 阻止头代码被添加两次是对预处理器的非常有限甚至深奥的使用......几乎不是“正常”。
  • @Jim Balter 根据最初的问题,kevin 和其他可能找到这些答案的人可能首先在代码中将其视为标头保护...
  • 这种说法没有根据。事实上,从最初的问题来看,这极不可能。
  • @Jim Balter 这是一个基础:当我第一次看到它们时,想知道#ifif 之间的区别是什么,它来自其他人的来源
  • 那是关于你的,而不是关于“凯文和其他人”的。我坚持我的声明。
【解决方案2】:

预处理器 if 由预处理器处理,作为正在编译的程序的第一步。正常的 if 在程序执行时在运行时处理。预处理器指令用于启用条件编译,根据不同定义的预处理器常量/表达式使用代码的不同部分。普通 if 用于控制执行程序中的流程。

【讨论】:

    【解决方案3】:

    前面带有# 的语句称为预处理器指令。它们在实际编译代码之前由解析器处理。从使用 Google 的第一次搜索命中 (http://www.cplusplus.com/doc/tutorial/preprocessor/):

    预处理器指令是包含在我们程序代码中的行,它们不是程序语句,而是预处理器的指令。这些行前面总是有一个井号 (#)。预处理器在代码的实际编译开始之前执行,因此预处理器在语句生成任何代码之前消化所有这些指令。

    所以#if 将在编译时决定,“正常”if 将在运行时决定。换句话说,

    #define TEST 1
    #if TEST
    printf("%d", TEST);
    #endif
    

    将编译为

    printf("%d", 1);
    

    如果你写了

    #define TEST 1
    if(TEST)
    printf("%d", TEST);
    

    程序实际上会编译为

    if(1)
    printf("%d", 1);
    

    【讨论】:

    • 所以我们可以使用任何我们想要的东西?
    • @kevin No. 特别是int x=1; #if X==1 根本不起作用。
    猜你喜欢
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 2023-01-12
    相关资源
    最近更新 更多