相关疑难解决方法(0)

C++定义表达式评估

假设我们有这个表达式:

#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

c++

-1
推荐指数
1
解决办法
1747
查看次数

我不明白为什么这个程序打印这些结果

这个程序打印出-8 -4但我想知道为什么以及为什么不是编译器显示有关使用哪个函数的错误?为什么结果不同.我对定义这样的函数知之甚少,也可以解释一下

#include <stdio.h>
#include <stdlib.h>

int foo(int x, int y);

#define foo(x, y) x/y + x

int main() {
    int i = -6, j = 3;
    printf("%d ", foo(i + j, 3));
#undef foo
    printf("%d\n", foo(i + j, 3));
}

int foo(int x, int y) {
    return x/y + x;
}
Run Code Online (Sandbox Code Playgroud)

c

-1
推荐指数
1
解决办法
86
查看次数

任何人都可以解释此代码如何执行?

任何人都可以解释我为什么我得到的输出是64,而不是4?

#include <stdio.h>
#define square(m) m*m
int main()
 {
  int i;
  i=64/square(4);
  printf("%d",i);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c

-1
推荐指数
1
解决办法
60
查看次数

为什么GCC没有为int division生成正确的汇编代码?

我写了以下C代码.但是在运行时它给了我不正确的变量值sb,所以我尝试用GDB调试它,我发现int division E(vdes->addr, bs)(#define E(X,Y) X/Y)的汇编代码是完全不可理解的,似乎没有做正确的事情.

文件:main.c

typedef struct virtual_file_descriptor
{
    int     dfb;
    int     addr;

} vfd;

vfd vdes;

if(!strcmp(argv[1], "write")){
        vdes.dfb = atoi(argv[2]);
        vdes.addr = atoi(argv[3]);
        vwrite(&vdes, inbuffer, atoi(argv[4]));
    }
Run Code Online (Sandbox Code Playgroud)

文件:vwrite.c

#define E(X,Y)  X/Y
#define bs      sizeof(D_Record)*MAX_BLOCK_ENTRIES

int vwrite(vfd *vdes, char *buffer, int size){
    if(!vdes)
        return -1;

    int sb, nb, offset;

    sb      = E(vdes->addr, bs) + 1;     // i did 140/280 => wrong result
    offset  = vdes->addr - (sb - 1) * bs;

    printf("size=%d …
Run Code Online (Sandbox Code Playgroud)

c assembly gcc integer

-2
推荐指数
2
解决办法
237
查看次数

#define如何在C++中工作

#include <iostream>
using namespace std;

#define squareOf(x) x*x

int main() {
// your code goes here
int x;
cout<<squareOf(x+4);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为答案会是16,但它的结果为4.我很困惑这是如何工作的.

c++

-4
推荐指数
1
解决办法
247
查看次数

#define SQR(x)(x*x)的答案不正确

以下程序正在打印 49

#include <stdio.h> 
#define SQR(x) (x*x) 
void main(void) { 
    int x, y; x = 5; 
    y = SQR(++x); 
    printf("y is %d\n", y); 
}
Run Code Online (Sandbox Code Playgroud)

我不明白我错过了什么.
这里就是我理解它是如何可能是工作
SQR(++x), ++x将被评估为6之后x*x36应退还.
因此y = 36
,答案是49

c

-5
推荐指数
1
解决办法
345
查看次数

标签 统计

c ×4

c++ ×2

assembly ×1

gcc ×1

integer ×1