有问题的 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*/
}
我最近开始写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*/ }