我在网上找到了这个C程序:
#include <stdio.h>
int main(){
printf("C%d\n",(int)(90-(-4.5//**/
-4.5)));
return 0;
}
这个程序有趣的是,当它在C89模式下编译并运行时,它会打印C89
,当它在C99模式下编译并运行时,它会打印C99
。但我无法弄清楚这个程序是如何工作的。
你能解释一下在上面的程序中,printf
的第二个参数是如何工作的吗?
因为//
注释只存在于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;
}
行注释//
自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*/
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可以做到这一点吗?我在这篇文章中尝试了以下示例,但它并不总是适用于蓝牙情况。我的代码如下: 我还拥有用户音频的必要权限: <