pelicula operator bitwise c operators logical-operators

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 ).



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>



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 &&