0

我有一个 C++ 定义语句为:

#define PING 10

在我的main功能中,我有类似的东西:

int main()
{
    int code;
    cout<<"enter command code";
    cin>>code;      // value entered 10
    cout<<code;   //here i want "PING" output instead of 10
                
    return 0;
}

如何在输出中用 PING 替换 10?

编辑:

我将有多个#define as

#define PING 10
#define STATUS 20
#define FETCH 74
#define ACK 12
#define TRAIL 9
#define EXIT 198

现在我的业务逻辑将只获得命令代码,即 10 或 12 等

我想检索该代码的相应命令名称..怎么可能?

4

3 回答 3

2

您定义的 PING 是一个预处理器宏。在所有出现 PING 时,它将被简单地替换为 10。

要打印 PING 代替 10,您需要将字符串“PING”存储在某处,以便您可以在运行时打印它。

于 2012-09-17T06:39:27.983 回答
2

怎么换:

cout << code;

和:

if (code == PING)
    cout << "PING";
else
    cout << code;

这是最简单的方法,如果你有一个#define. 对于更复杂的情况,您可以根据#define值查找一个字符串数组,例如:

#define E_OK        0
#define E_NOMEM     1
#define E_BADFILE   2
#define E_USERERROR 3
#define E_NEXT_ERR  4

static const char *errStr[] = {
    "Okay",
    "No memory left",
    "Bad file descriptor",
    "User is insane",
};
:
if ((errCode < 0) || (errCode >= E_NEXT_ERR))
    cout << "Unknown error: " << errCode << '\n';
else
    cout << "Error: " << errStr[errCode] << '\n';

如果值不同,您可以选择非基于数组的解决方案,例如:

#define PING 10
#define STATUS 20
#define FETCH 74
#define ACK 12
#define TRAIL 9
#define EXIT 198
:
const char *toText (int errCode) {
    if (errCode == PING  ) return "Ping";
    if (errCode == STATUS) return "Status";
    if (errCode == FETCH ) return "Fetch";
    if (errCode == ACK   ) return "Ack";
    if (errCode == TRAIL ) return "Trail";
    if (errCode == EXIT  ) return "Exit";
                           return "No idea!";
}

您可能要考虑做的另一件事是用#define枚举常量替换值。像这样简单的事情可能无关紧要,但提供的类型安全和额外信息几乎肯定会在您职业生涯的某个阶段减轻您的调试工作。

现在,我一般只#define用于条件编译。常量最好用枚举来完成,而且我已经很长时间没有在什么应该和不应该是内联函数上超越编译器了:-)

于 2012-09-17T06:38:03.647 回答
0

您无法获得预处理器指令的左值,因为在编译之前工作,并且只需将代码中#define所有出现的 . 替换为. 所以如果你写,例如,那么,在编译开始之前,预处理器会将它替换为,显然 10 是一个右值。PING10if(code == PING)if(code == 10)

在您的情况下,您可以这样做:

int main()
{
    int code;
    cout<<"enter command code";
    cin>>code;      
    if( code == PING )
        cout<<code;   
    else 
        cout<<code;

    return 0;
}
于 2012-09-17T06:38:51.177 回答