c++ - programación - programar pic en c mplab
¿Por qué se compila este código C++? ¿Qué hace? (3)
Es un ,
operador de coma . Si tienes una expresión como esta:
i = (a, b);
b
se almacenará en i
.
Así que en tu caso:
bRet = pOutFilename;
pOutFilename
se almacenará en bRet
.
Esta pregunta ya tiene una respuesta aquí:
- Usos del operador de coma C [duplicar] 20 respuestas
Tuve este problema cuando borré accidentalmente el nombre del método. El código pasó de
bool bRet = MethodName(pData, pOutFilename);
a
bool bRet = (pData, pOutFilename);
pero aun así compilado? ¿Qué hace este código? Qué significa eso? Parece que vuelve verdadero, ¿es esto siempre el caso (incluso si pData es nulo)?
¡Cualquier idea es bienvenida!
Su expresión bool bRet = (pData, pOutFilename);
es una expresión válida y es equivalente a la expresión bool bRet = pOutFilename;
En bool bRet = (pData, pOutFilename);
, se evalúa la primera expresión pData
, luego se evalúa la segunda expresión pOutFilename
, luego se asigna el valor de la segunda expresión a bRet
(así es como el operador trabaja de izquierda a derecha).
Leer: Operador de coma:
El operador de coma
,
tieneleft-to-right associativity
. Dos expresiones separadas por una coma se evalúan de izquierda a derecha. El operando izquierdo siempre se evalúa, y todos los efectos secundarios se completan antes de que se evalúe el operando derecho.
Para comprender la importancia del paréntesis ( )
en su expresión, considere mi ejemplo a continuación. Observe la salida en este ejemplo (tengo el ejemplo de C):
int main () {
int i = 10, b = 20, c= 30;
i = b, c; // i = b
printf("%i/n", i);
i = (b, c); // i = c
printf("%i/n", i);
}
salida:
20
30
Para entender el resultado: mire la tabla de precedencia ,
tenga precedencia más baja que =
. En tu expresión has sobrescrito la precedencia usando paréntesis.
es el "operador de coma" que
evalúa su primer operando y descarta el resultado, y luego evalúa el segundo operando y devuelve este valor (y tipo).