Siriuswz 2023-02-13 00:39 采纳率: 0%
浏览 16

宏定义标识符被调函数

函数中宏定义的标识符和被调函数中的变量一样时为什么会出错?是因为主调函数中的变量、被调函数中变量、宏定义的标识符相同的原因吗?
还是说其他的?

//错的 
#include<stdio.h>
#define n 5
sort1(int a[],int n)
{
    int i,j,t,flag;
    for(i=0;i<n-1;i++)
    {
        flag=1;
        for(j=0;j<n-1-i;j++)
            if(a[j]<a[j+1])
            {
                t=a[j];a[j]=a[j+1];a[j+1]=t;
                flag=0;
            }
        if(flag==1)
            break;    
    }
    return n;
}
sort2(int a[],int n)
{
    int i,j,t,min;
    for(i=0;i<n;i++)
    {
        min=i;
        for(j=i+1;j<n;j++)
            if(a[j]<a[min])
            {
                t=a[j];a[j]=a[min];a[min]=t;
            }
    }
    return n;
}
int main()
{
    int a[n]={34,45,23,12,67},i,j;
    /*for(i=0;i<x;i++)
        scanf("%d",&a[i]);*/
    for(i=0;i<sort1(a,n);i++)
        printf("%d ",a[i]);
    printf("\n");    
    for(i=0;i<sort2(a,n);i++)
        printf("%d ",a[i]);
    printf("\n");            
    return 0;
}

img

//对的:
#include<stdio.h>
#define x 5
sort1(int a[],int n)
{
    int i,j,t,flag;
    for(i=0;i<n-1;i++)
    {
        flag=1;
        for(j=0;j<n-1-i;j++)
            if(a[j]<a[j+1])
            {
                t=a[j];a[j]=a[j+1];a[j+1]=t;
                flag=0;
            }
        if(flag==1)
            break;    
    }
    return n;
}
sort2(int a[],int n)
{
    int i,j,t,min;
    for(i=0;i<n;i++)
    {
        min=i;
        for(j=i+1;j<n;j++)
            if(a[j]<a[min])
            {
                t=a[j];a[j]=a[min];a[min]=t;
            }
    }
    return n;
}
int main()
{
    int a[x]={34,45,23,12,67},i,j;
    /*for(i=0;i<x;i++)
        scanf("%d",&a[i]);*/
    for(i=0;i<sort1(a,x);i++)
        printf("%d ",a[i]);
    printf("\n");    
    for(i=0;i<sort2(a,x);i++)
        printf("%d ",a[i]);
    printf("\n");            
    return 0;
}

  • 写回答

3条回答 默认 最新

  • MatlabBuddy 2023-02-13 01:43
    关注

    可以重名,在定义了宏之后,无论宏名称出现在源代码的何处,预处理器都会把它用定义时指定的文本替换掉。你定义的n为5,sort函数经过预处理后就成了int 5,变量名的开头必须是字母或下划线,不能是数字。

    #include<stdio.h>
    #define N 5
    #define n str
    int sort1(int a[],int n)
    {
        int i,j,t,flag;
        for(i=0;i<n-1;i++)
        {
            flag=1;
            for(j=0;j<n-1-i;j++)
                if(a[j]<a[j+1])
                {
                    t=a[j];a[j]=a[j+1];a[j+1]=t;
                    flag=0;
                }
            if(flag==1)
                break;    
        }
        return n;
    }
    int sort2(int a[],int n)
    {
        int i,j,t,min;
        for(i=0;i<n;i++)
        {
            min=i;
            for(j=i+1;j<n;j++)
                if(a[j]<a[min])
                {
                    t=a[j];a[j]=a[min];a[min]=t;
                }
        }
        return n;
    }
    int main()
    {
        int a[N]={34,45,23,12,67},i,j;
        /*for(i=0;i<x;i++)
            scanf("%d",&a[i]);*/
        for(i=0;i<sort1(a,N);i++)
            printf("%d ",a[i]);
        printf("\n");    
        for(i=0;i<sort2(a,N);i++)
            printf("%d ",a[i]);
        printf("\n");            
        return 0;
    }
     
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 2月13日

悬赏问题

  • ¥15 远程访问linux主机超时
  • ¥15 odoo17存货管理优势于中国国内该行业传统ERP或MES的详细解读和举例
  • ¥15 CPU卡指令整合指令数据都在图片上
  • ¥15 火车票关联12306问题
  • ¥15 odoo17处理受托加工产品
  • ¥15 如何用MATLAB编码图三的积分
  • ¥15 圆孔衍射光强随孔径变化
  • ¥15 MacBook pro m3max上用vscode运行c语言没有反应
  • ¥15 ESP-PROG配置错误,ALL ONES
  • ¥15 结构功能耦合指标计算