重新定义符号的算术如何工作?

问题描述 投票:0回答:3

C ++允许程序员以以下方式重新定义符号

#define A 0

但是当这些重新定义的符号在彼此的上下文中并以算术方式使用时,它们的行为方式是不寻常的,因为这些值被视为字符串,而不是文字。

我对该算法使用的逻辑感到困惑,并希望对它的工作原理进行解释。我已经进行了多次测试,试图通过使用不同的值来了解其工作原理,但仍然让我感到困惑。

示例1:

#define A 0
#define B A+1
#define C 1-B

cout << C;

示例2:

#define ALPHA 2-1
#define BETA ALPHA * 2

cout << BETA;

示例1:预期输出为0,实际输出为2示例2:预期输出为2,实际输出为0

谁能解释这是如何工作的?

C ++允许程序员以#define A 0的方式重新定义符号,但是由于......>

c++ c-preprocessor
3个回答
1
投票
宏是文本替换。以下各行显示了如何逐步将文本替换为预处理器:

cout << C; cout << 1-B; cout << 1-A+1; cout << 1-0+1; cout << BETA; cout << ALPHA * 2; cout << 2-1 * 2;


0
投票
#define预处理程序宏支持

文本替换


0
投票
这些宏被简单地内联替换为您定义的任何宏。因此:

#define A 0 #define B A+1 #define C 1-B cout << C;

© www.soinside.com 2019 - 2024. All rights reserved.