operator - Operador "&&" y "and" en C
operator pelicula (8)
Estoy tratando de calcular el mayor denominador común de dos enteros.
Código C:
#include <stdio.h>
int gcd(int x, int y);
int main()
{
int m,n,temp;
printf("Enter two integers: /n");
scanf("%d%d",&m,&n);
printf("GCD of %d & %d is = %d",m,n,gcd(m,n));
return 0;
}
int gcd(int x, int y)
{
int i,j,temp1,temp2;
for(i =1; i <= (x<y ? x:y); i++)
{
temp1 = x%i;
temp2 = y%i;
if(temp1 ==0 and temp2 == 0)
j = i;
}
return j;
}
En la sentencia if, note el operador lógico. Es and
no es &&
(por error). El código funciona sin ninguna advertencia o error.
¿Hay un operador and
en C? Estoy usando orwellDev-C ++ 5.4.2 (en modo c99 ).
Básicamente and
es solo la versión de texto de &&
en c . Sin embargo, es necesario #include <iso646.h>
. O no va a compilar.
Puede leer más aquí:
http://msdn.microsoft.com/en-us/library/c6s3h5a7%28v=vs.80%29.aspx
Echa un vistazo a la página aquí iso646.h
Este encabezado define 11 macros que son equivalentes de texto de algunos operadores comunes. and
es uno de los definidos.
Tenga en cuenta que solo puedo probar esto para un compilador de C ++, así que no estoy seguro si puede usar esto con un compilador de C estricto.
EDITAR Acabo de probarlo con un compilador de C here y funciona.
El operador and
es el texto equivalente de &&
Operador de &&
.
El operador or
es el texto equivalente a ||
Ref.- O Operador
Así que resA
y resB
son idénticos.
Se está compilando porque creo que incluiste el archivo de cabecera iso646.h (ciso646.h). Según él y es idéntico a &&. Si no incluyes eso da error de compilación.
Si el código en su pregunta se compila sin errores, o bien no está compilando realmente en modo C99 o (es menos probable) su compilador tiene errores. O el código está incompleto y hay un #include <iso646.h>
que no nos has mostrado.
Lo más probable es que estés invocando tu compilador en modo C ++. Para probar esto, intente agregar una declaración como:
int class;
El compilador AC aceptará esto; un compilador de C ++ lo rechazará como un error de sintaxis, ya que la class
es una palabra clave. (Esto puede ser un poco más confiable que probar la macro __cplusplus
; un sistema de desarrollo mal configurado podría invocar un compilador de C ++ con el preprocesador en modo C).
En C99, el encabezado <iso646.h>
define 11 macros que proporcionan ortografías alternativas para ciertos operadores. Uno de estos es
#define and &&
Para que puedas escribir
if(temp1 ==0 and temp2 == 0)
en C solo si tiene un #include <iso646.h>
; De lo contrario es un error de sintaxis.
<iso646.h>
se agregó al lenguaje mediante la enmienda de 1995 a la norma ISO C de 1990, por lo que ni siquiera necesita un compilador compatible con C99 para usarlo.
En C ++, el encabezado es innecesario; los mismos tokens definidos como macros por C''s <iso646.h>
son ortografías alternativas incorporadas. (Están definidos en la misma sección del estándar C ++, 2.6 [lex.digraph], como los dígrafos, pero una nota al pie aclara que el término "dígrafo" no se aplica a las palabras clave léxicas como and
.) Como el estándar C ++ dice:
En todos los aspectos del lenguaje, cada token alternativo se comporta igual, respectivamente, como token primario, excepto por su ortografía.
Podría usar #include <ciso646>
en un programa de C ++, pero no tiene sentido hacerlo (aunque afectará el comportamiento de #ifdef and
).
En realidad, no recomendaría el uso de tokens alternativos, ya sea en C o en C ++, a menos que realmente lo necesite (por ejemplo, en el caso muy poco frecuente de que esté en un sistema en el que no pueda ingresar fácilmente el carácter &
). Aunque son más legibles para los no programadores, es probable que sean menos legibles para alguien con un conocimiento decente del lenguaje C y / o C ++, como lo demuestra el hecho de que tenía que hacer esta pregunta.
&&
y and
son tokens alternativos y son funcionalmente iguales, de la sección 2.6 tokens alternativos del borrador de norma de C ++ :
Alternative Primary
and &&
Es una de las entradas en la Tabla 2 - Fichas alternativas y dice en la subsección 2:
En todos los aspectos del lenguaje, cada token alternativo se comporta igual, respectivamente, como token primario, excepto por su ortografía. El conjunto de fichas alternativas se define en la Tabla 2.
Como señala Potatoswatter, el uso and
lo más probable es que confundan a la mayoría de las personas, por lo que probablemente sea mejor seguir con &&
.
Es importante tener en cuenta que en Visual Studio
no hay quejas en C ++ y que aparentemente no planea serlo.
Editar
Estoy agregando una respuesta específica de C, ya que originalmente fue una respuesta a una pregunta de C ++ pero se merged . Estoy agregando la cita relevante del borrador de la norma C99 que es la sección 7.9 Ortografía alternativa <iso646.h>
párrafo 1 dice:
El encabezado define las siguientes once macros (a la izquierda) que se expanden a los tokens correspondientes (a la derecha):
e incluye esta línea, así como varias otras:
and &&
También podemos encontrar una buena referencia here .
Actualizar
Mirando su última actualización de código, no estoy seguro de que esté realmente compilando en modo C, las notas de la versión para OrwellDev 5.4.2 dicen que está utilizando GCC 4.7.2. No puedo hacer que se -xc
en gcc-4.7
ni en gcc-4.8
usando -xc
para poner en modo lenguaje C, consulte el código en vivo aquí . Aunque si gcc
línea gcc
y usas g++
se construirá bien. También construye bien bajo gcc
si no #include <iso646.h>
&&
y and
son sinónimos y significan Lógico Y en C ++. Para obtener más información, consulte Operadores lógicos en C ++ y Sinónimos del operador en C ++ .
and
es solo un token alternativo para &&
.
Podemos citar fácilmente el estándar aquí:
2.6 fichas alternativas [lex.digraph]
En todos los aspectos del lenguaje, cada token alternativo se comporta igual, respectivamente, como token primario, excepto por su ortografía. El conjunto de fichas alternativas se define en la Tabla 2.
En la tabla 2:
Alternative | Primary and | &&
Pero te sugiero que uses &&
. Las personas acostumbradas a C / C ++ pueden confundirse con and
...
Dado que ahora está fusionado, también estamos hablando de C, puede consultar esta página iso646.h define los tokens alternativos.
Este encabezado define 11 constantes de macro con ortografías alternativas para aquellos operadores de C ++ que no son compatibles con el conjunto de caracteres estándar ISO646.
Del proyecto de norma C99:
7.9
<iso646.h>
alternativos<iso646.h>
El encabezado de fi ne las siguientes once macros (a la izquierda) que se expanden a las fichas correspondientes (a la derecha):
and &&