我试图在这里理解这段代码:
#include <iostream>
using namespace std;
#define mymult(a, b) a*b
inline int mymult1(int a, int b) {return a*b;}
int main() {
cout << "mymult(2+2, 3+3) = " << mymult(2+2, 3+3) << "\n";
cout << "mymult1(2+2, 3+3) = " << mymult1(2+2, 3+3) << "\n";
}
Run Code Online (Sandbox Code Playgroud)
mymult = 11,mymult1 = 24.我知道'#define实际上是通过名字调用而不是按值调用.但是,我很难理解为什么它返回的值是11 ......而不是24.这是什么原因造成的?
所以我在C程序中使用宏调用时遇到了这个相当'不屈不挠'的问题.我使用的宏是:
#define MACRO(X) X*X
Run Code Online (Sandbox Code Playgroud)
问题出在我这样做的时候
printf("%d",MACRO(3));
Run Code Online (Sandbox Code Playgroud)
结果显示9(这是正确的).只有当我将3传递为2 + 1时如下:
printf("%d",MACRO(2+1));
Run Code Online (Sandbox Code Playgroud)
它奇怪地显示了5的结果.任何人都可以告诉我为什么?
我无法理解这段代码
#define sqt(x) x*x
int main(){
print("%d",sqt(3+1));
}
Run Code Online (Sandbox Code Playgroud)
手动我得到10的输出.但是当编写代码并编译它时我得到的答案为7.请解释一下.
我的代码:
#include <stdio.h>
#define PRODUCT(x) (x * x)
int main()
{
int i = 3, j, k, l;
j = PRODUCT(i + 1);
k = PRODUCT(i++);
l = PRODUCT(++i);
printf("%d %d %d %d", i, j, k, l);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么输出是:
7 7 12 49.
Run Code Online (Sandbox Code Playgroud)
宏中是否有任何错误或其他问题?
#include <stdio.h>
#define CUBE(x) (x * x * x)
int main() {
printf("%d", CUBE(4+5));
return 0;
}
Run Code Online (Sandbox Code Playgroud) #include <iostream>
using namespace std;
# define p 5+3
int main() {
//code
int i=p*p;
cout<<i;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
预期产量:64实际产量:23 howwW ?? 我不明白
我知道它#define
具有以下语法:#define SYMBOL string
例如,如果我写
#define ALPHA 2-1
#define BETA ALPHA*2
Run Code Online (Sandbox Code Playgroud)
然后ALPHA = 1
但BETA = 0
.(为什么?)
但如果我写这样的东西
#define ALPHA (2-1)
#define BETA ALPHA*2
Run Code Online (Sandbox Code Playgroud)
然后ALPHA = 1
和BETA = 2
.
有人可以解释一下这两者之间有什么区别吗?
所以,我很困惑为什么 i 的输出是 27 而不是 343
#include <stdio.h>
#define x 5+2
void main() {
int i;
i=x*x*x;
printf("%d",i); }
Run Code Online (Sandbox Code Playgroud) 假设我们有这个表达式:
#define cube(x) x * x * x
Run Code Online (Sandbox Code Playgroud)
然后我们称之为:
int n = 3, v;
v = cube(n + 1); // v = 10
v = cube((n + 1)); // v = 64
v = cube(n); // v = 27
Run Code Online (Sandbox Code Playgroud)
所以问题是:为什么第一次操作不做v = 64
?
数量级不正确:
#include <stdio.h>
#include <math.h>
#define M_H 1.007975/(6.02214076*pow(10,23)*1000)
#define k_B 1.380649*pow(10,-23)
int main()
{
printf("%G\n",M_H);
printf("%G\n",k_B);
printf("%G\n",M_H/k_B);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
因为它给出:
1.67378E-27
1.38065E-23
1.21232E-50
Run Code Online (Sandbox Code Playgroud)
我需要定义的常量。
我使用带有-lm
标志的 gcc 12.2.1-1。我期待着:
1.67378E-27
1.38065E-23
1.21232E-4
Run Code Online (Sandbox Code Playgroud)