我想知道预处理程序指令在 C / C ++中的循环中是如何计算的? 以下是代码,它在for循环中使用指令,但它不起作用。为什么会这样?
的main.cpp
#include <stdio.h>
class Student
{
public:
int roll;
int marks;
Student()
{
roll = 10;
marks = 0;
}
};
int main()
{
printf("Hello, World!\n");
int iCounter;
char attr[][6] = {"roll", "marks"};
Student std;
#define PRINT1(std, X) printf("%d", std.##X);
for (iCounter = 0; iCounter < 2; iCounter++)
{
PRINT1(std, attr[iCounter])
}
return 0;
}
答案 0 :(得分:1)
预处理器是预编译阶段。它本质上是一个代码生成器,因此不了解您的for
循环或与之互动。
你不能以这种方式迭代一个班级的成员。
这里是您的预处理代码的样子(由于显而易见的原因,我省略了标题扩展):
class Student
{
public:
int roll;
int marks;
Student()
{
roll = 10;
marks = 0;
}
};
int main()
{
printf("Hello, World!\n");
int iCounter;
char attr[][6] = {"roll", "marks"};
Student std;
for (iCounter = 0; iCounter < 2; iCounter++)
{
printf("%d", std.attr[iCounter]);
}
return 0;
}
由于attr
不是std
的成员(某个对象名称太糟糕了;请更改它),希望您现在可以看到这是怎么回事&#34; work&#34;如你所愿。
此外,your macro is actually inherently broken and produces an error,因为您使用的是##
,而您不应该这样做。即使这个代码是你想要的,正确的定义也只是:
#define PRINT1(std, X) printf("%d", std.X);