当前位置: 首页 > 知识库问答 >
问题:

以下程序在C89模式下编译时如何输出'C89',在C99模式下编译时如何输出'C99'?

訾稳
2023-03-14

我在网上找到了这个C程序:

#include <stdio.h>

int main(){

    printf("C%d\n",(int)(90-(-4.5//**/
    -4.5)));

    return 0;
}

这个程序有趣的是,当它在C89模式下编译并运行时,它会打印C89,当它在C99模式下编译并运行时,它会打印C99。但我无法弄清楚这个程序是如何工作的。

你能解释一下在上面的程序中,printf的第二个参数是如何工作的吗?

共有3个答案

莫河
2023-03-14

因为//注释只存在于C99及更高版本的标准中,所以代码相当于以下内容:

#include <stdio.h>

int main (void)
{
  int vers;

  #if   __STDC_VERSION__ >= 201112L
    vers = 99; // oops
  #elif __STDC_VERSION__ >= 199901L
    vers = 99;
  #else
    vers = 90;
  #endif

  printf("C%d", vers);

  return 0;
}

正确的代码是:

#include <stdio.h>

int main (void)
{
  int vers;

  #if   __STDC_VERSION__ >= 201112L
    vers = 11;
  #elif __STDC_VERSION__ >= 199901L
    vers = 99;
  #else
    vers = 90;
  #endif

  printf("C%d", vers);

  return 0;
}
卞轶
2023-03-14

行注释//自C99开始引入。因此您的代码在C89中等于此

#include <stdio.h>

int main(){

    printf("C%d\n",(int)(90-(-4.5/
-4.5)));

    return 0;
}
/* 90 - (-4.5 / -4.5) = 89 */

在C99中等于这个

#include <stdio.h>

int main(){

    printf("C%d\n",(int)(90-(-4.5
-4.5)));

    return 0;
}
/* 90 - (-4.5 - 4.5) = 99*/
贺俊杰
2023-03-14

C99允许/-风格的注释,C89不允许。因此,要翻译:

C99:

 printf("C%d\n",(int)(90-(-4.5     /*Some  comment stuff*/
                         -4.5)));
// Outputs: 99

C89:

printf("C%d\n",(int)(90-(-4.5/      
                         -4.5)));
/* so  we get 90-1 or 89 */
 类似资料:
  • 问题内容: 我有使用Python编写的自定义命令行,该命令行使用“ print”语句打印其输出。我通过生成一个子进程并使用 child.stdin.write 方法向其发送命令来从Node.js使用它。来源: 现在的问题是我没有以流动模式接收输出。我希望在打印子进程后立即获得它的输出,但是仅当子进程终止时(使用自定义cli的 quit 命令),我才接收所有命令的输出。 问题答案: 您需要在子进程中

  • 要修补三星和wiko设备上的一些崩溃,我必须在发布模式下在设备上运行我的应用程序。但我想看到。 我该怎么办?

  • 我使用lein new app hello构建了我的项目,所以我有这个结构 我想在我的项目中添加另一个助手模块,这样我就可以在测试和src模块中使用代码,因为我希望它与src目录解耦。 所以我添加了一个助手模块 如何更改我的project.clj文件使lein run编译。当我试图要求帮助者命名空间时,lein run不编译并抛出以下错误。 线程“main”java中出现异常。lang.Class

  • 问题内容: 我想在Eclipse中编译我的Java程序,但不想运行它。我不知道该怎么做。 如何在不运行Eclipse的情况下将Java程序编译为文件? 问题答案: 您可以在项目菜单中自动取消选中构建,然后通过按Ctrl + B或单击打印机图标右侧出现的图标手动构建。

  • 我的使用案例是,我有一个应用程序,用户可以在其中按下按钮,然后在外部扬声器和有线耳机/蓝牙设备之间切换。如果用户连接到有线耳机或蓝牙耳机设备,我想将该有线耳机或蓝牙的音频输出切换到外部扬声器,然后当他们再次单击时,重新启动有线耳机/蓝牙音频输出。 有人知道Android 10可以做到这一点吗?我在这篇文章中尝试了以下示例,但它并不总是适用于蓝牙情况。我的代码如下: 我还拥有用户音频的必要权限: <