首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >两个类似的C程序,宏产生不同的输出

两个类似的C程序,宏产生不同的输出
EN

Stack Overflow用户
提问于 2017-02-18 17:21:59
回答 1查看 62关注 0票数 0

以下代码不输出任何内容:

代码语言:javascript
运行
复制
#include<stdio.h>
#define TOTAL_SIZE ( (sizeof(array))/(sizeof(array[0])) )
int main()
{
    int array[]={1,2,3}, d;
    for(d=-1; d<=TOTAL_SIZE-2; ++d)
    {
        printf("%d\n", array[d+1]);
    }
    return 0;
}

d=-1 <=3-2

代码语言:javascript
运行
复制
    prints array[-1+1] which is array[0]
代码语言:javascript
运行
复制
d=0  <=3-2
代码语言:javascript
运行
复制
    prints array[0+1] which is array[1]
代码语言:javascript
运行
复制
d=1  <=3-2
代码语言:javascript
运行
复制
    prints array[1+1] which is array[2]

但是连一个元素都没有打印出来!

但是,此代码生成打印数组中所有元素的正确输出:

代码语言:javascript
运行
复制
#include<stdio.h>
#define TOTAL_SIZE ( (sizeof(array))/(sizeof(array[0])) )
int main()
{
    int array[]={1,2,3}, d;
    for(d=0; d<=TOTAL_SIZE-1; ++d)
    {
        printf("%d\n", array[d]);
    }
    return 0;
}

但这两个循环的净效应似乎是相同的。

如果我们将宏TOTAL_SIZE替换为数组中的元素数,它就能工作。因此,问题似乎与宏有关。

但是,当我试图打印TOTAL_SIZE生成的值时,它会打印正确的值。

第一个节目有什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-18 17:30:08

宏的问题是,sizeof返回一个size_t,它是与有符号int相比的无符号整数类型。解决方案是将您的大小转换为int

#define TOTAL_SIZE (int)( (sizeof(array))/(sizeof(array[0])) )

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42318293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档