【发布时间】:2016-06-29 22:04:39
【问题描述】:
我正在尝试定义宏以在 C++ 中读取和打印矩阵,但我尝试了一些不同的方法,但它不起作用:
#define rm(A, m, n, type)
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
scanf("%##type##", &A[i][j]);
A 是矩阵(int 或 char)
我想写 d 或 c 来读取 int 或 char,但这段代码不起作用,我什至不知道为什么,我只是尝试使用 concat ## 符号来创建 scanf 接收的字符串论据,但它有错误。
我的问题是:
1 - 为什么错了?
2 - 我怎样才能使这个宏正常工作? (如有必要,解决方案可能包含 1 或 2 个宏声明,但很短,否则我不会问,我可以为 int 创建一个宏,为 char 创建其他宏。
PS:这个宏写了一行,上面的算法只是为了展示它的作用。
谢谢
【问题讨论】:
-
宏是邪恶的。使其成为内联函数。例如,宏允许您将“hello”作为一个参数传递,将“Frog”作为类型传递。
-
顺便说一句,使用花括号
{和}不会影响运行时并且对编译的影响可以忽略不计。使用它们。这是一种减少缺陷的方法。 -
我认为问题在于替换字符文字。您可能必须传递整个
scanf格式字符串。 -
不要费心阅读第二个矩阵。这个系列在第一个之后真的走下坡路了。