预处理器指令在 for 循环中不起作用
Preprocessor directive not working in for loop
我想知道在 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;
}
预处理器是一个 pre-compilation 阶段。它本质上是一个代码生成器,因此不了解您的 for
循环或与您的循环交互。
您根本无法以这种方式遍历 class 的成员。
这是你的预处理代码的样子(出于显而易见的原因,我省略了 header 扩展):
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
的成员(object 的名称很糟糕;请更改它),希望您现在可以了解这不会如何 "work" 如您所愿。
此外,your macro is actually inherently broken and produces an error,因为您在不该使用的地方使用了 ##
。即使这段代码是您想要的,正确的定义也应该是:
#define PRINT1(std, X) printf("%d", std.X);
我想知道在 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;
}
预处理器是一个 pre-compilation 阶段。它本质上是一个代码生成器,因此不了解您的 for
循环或与您的循环交互。
您根本无法以这种方式遍历 class 的成员。
这是你的预处理代码的样子(出于显而易见的原因,我省略了 header 扩展):
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
的成员(object 的名称很糟糕;请更改它),希望您现在可以了解这不会如何 "work" 如您所愿。
此外,your macro is actually inherently broken and produces an error,因为您在不该使用的地方使用了 ##
。即使这段代码是您想要的,正确的定义也应该是:
#define PRINT1(std, X) printf("%d", std.X);