有问题的C宏

时间:2015-03-04 16:17:34

标签: c macros

我最近开始编写C宏,下面的代码确实没有 将预期文本输出到屏幕。问题在于定义print_int,我想使用print_int宏作为带有所需文本的整数参数,并使用函数内部写入的任何文本(不在#define部分中)打印出整数值。代码不会打印出来" Total is"文字到屏幕。我该如何更正代码?

#include <stdio.h>

#define     print_int(integ, a)     printf("%d", a)
#define     read(j)                 scanf("%d", &j)
#define     print_free(s)           printf(s)

int main(int argc, char *argv[]) {

    _add_();
}

_add_()
{
    int c, j, total;

    print_free("Enter first number: ");
    read(c);

    print_free("Enter second number: ");
    read(j);

    total = c + j;
    print_int("Total is %d", total);
}

2 个答案:

答案 0 :(得分:0)

更改print_int的宏定义
#define     print_int(integ, a)     printf("%d", a)  

#define     print_int(integ, a)     printf(integ, a)  

BTW,函数_add在第一次调用之前应该有一个返回类型和一个声明,否则它将调用未定义的行为。

答案 1 :(得分:-1)

为什么不在宏定义中包含“Total is”,然后删除integ,这样您只需要传递1个元素。

#define print_int(a) printf("Total is %d", a)

print_int(total);

旁注,我建议您编辑_add_功能。

  • 标准库函数使用_varName_格式。避免误解。
  • 声明数据类型(即.void,int)
  • 良好的编码实践通常是在main()之前声明函数(还没有函数定义),然后在main()之后提供定义。像这样的东西:

    void vAdd();         //declaration
    int main(){
        /*code*/
    }
    void vAdd()          //definition
    {
        /*code*/
    }
    
相关问题