有问题的 C 宏

Problematic C macro

我最近开始写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);
}

print_int 的宏定义从

更改为
#define     print_int(integ, a)     printf("%d", a)  

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

顺便说一句,函数 _add 应该有一个 return 类型和在第一次调用之前的声明,否则它会调用未定义的行为。

为什么不直接将 "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*/
    }