Я наткнулся на возможность сделать это.
#include <iostream>
using namespace std;
int main() {
if ( ({int i = 1024; i == 10;}) ) {
cout << "In" << endl;
}
}
Важной областью разборки, кажется, является:
-> 0x10000118f <+15>: movl $0x400, -0x18(%rbp) ; imm = 0x400
0x100001196 <+22>: cmpl $0xa, -0x18(%rbp)
0x10000119a <+26>: sete %al
0x10000119d <+29>: andb $0x1, %al
0x10000119f <+31>: movb %al, -0x19(%rbp)
0x1000011a2 <+34>: testb $0x1, -0x19(%rbp)
0x1000011a6 <+38>: je 0x1000011d9 ; <+89> at main.cpp:37
Из рассмотрения этого кажется, что требуется последнийоператор (сравнение i == 10
) в качестве логического значения для оператора if
.
Я понимаю, что этот случай не позволяет мне использовать переменную i
в операторе if из-за оператора области действия,но хотел знать , почему оператор if
решает использовать i == 10
в качестве логического оператора.
В качестве альтернативы этому я понимаю, что вызов функции может быть чище, который возвращаетлогическое значение, которое я могу использовать для установки переменной для оператора if
.Однако я вижу MACRO, которые расширяются до этого очень похожего стиля в исходном коде glibc.
Это старый стиль программирования с MACRO?
Есть липольза от этого мне не хватает?