c - 为什么 C 中的这个宏表达式的行为异常?
问题描述
我正在尝试在代码块 C 编辑器中编写此代码,但输出为 36 而不是 1。
#include <stdio.h>
#define square(x) x*x
int main()
{
int p=36/square(6);
printf("%d",p);
}
为什么输出是 36 而不是 1?
解决方案
问题是你的宏的定义中没有任何括号——并且宏不像函数那样被“调用”——它们只会导致文本被替换。
因此,在您的代码中,该行:
int p=36/square(6);
替换为:
int p=36/6*6;
它以从左到右的顺序进行评估(因为*
and/
运算符具有相同的优先级),有效地给出:
int p = (36/6) * 6;
要解决此问题,请在宏定义中添加括号:
#define square(x) ((x)*(x))
随时要求进一步澄清和/或解释。
推荐阅读
- r - R diagrammeR 水平图
- jquery - 如何在内部使用 JSON 对象而不是 HTML 中的外部文件
- android - 改造 API 在 onNavigationItemSelected 方法和 Fragment 中不起作用
- vb.net - 使用后台工作人员写入richtextbox
- ios - 从较小的 UIView Swift 创建较大的 UIView
- ruby-on-rails - 如何在 Rails 中基于范围的多租户应用程序中创建可以跨公司的代理模型
- python - 在python中使用套接字在文件之前发送元数据
- java - Camunda ENGINE-02006 没有条件序列流离开流节点
- ios - Playground - DispatchQueue.main.asyncAfter 不工作
- json - 方法调用失败,因为 [System.Collections.ObjectModel.Collection`1[[]] 不包含我添加到 pscustomobject 的方法