预处理器指令在 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);