¿Qué es __bit en el compilador XC8 C?

2

Tomemos un ejemplo:

extern volatile __bit TRISB0 @ (((unsigned) &TRISB)*8) + 0;

Creo que esto apunta TRISB0 a la dirección de bit apropiada. Pero no entiendo por qué se usa __bit en lugar de bit , el tipo de datos XC8.

He intentado encontrar una explicación para __bit en la Guía del usuario de XC8 y en otros lugares, pero sin ningún resultado.

    
pregunta James Rogers

2 respuestas

6

Está justo ahí en la guía del usuario en blanco y negro ...

bit y __bit son exactamente iguales, excepto por el nivel de compatibilidad:

  

Si se usa el indicador xc8 --STRICT, la palabra clave bit no estará disponible, pero puede usar la palabra clave __bit.

Por lo tanto, puede usar bit para su propio tipo de datos, nombre de variable, nombre de función, lo que desee, si especifica --STRICT en la línea de comandos, y aún usa __bit para especificar un bit.

  

La opción --STRICT se usa para habilitar el cumplimiento estricto de ANSI C de todos los especiales,   palabras clave no estándar.   El compilador MPLAB XC8 C admite varias palabras clave especiales (por ejemplo, el   calificador de tipo persistente). Si se utiliza la opción --STRICT, estas palabras clave son   modificado para incluir dos caracteres de subrayado al principio de la palabra clave (para   por ejemplo, __persistent) para cumplir estrictamente con el estándar ANSI. Asi si tu   use esta opción, necesitará usar el calificador __sistente en su código, no   persistente.

    
respondido por el Majenko
4

Esta es probablemente más una pregunta de programación general que una pregunta de electrónica, pero como este grupo abarca la programación de sistemas integrados hasta cierto punto, la responderé aquí.

El estándar C promete que el código puede usar cualquier identificador sintácticamente válido sin riesgo de conflicto con cualquier identificador definido por la implementación, siempre que:

  1. El código de usuario no usa la sintaxis #include <name> para ningún encabezado no definido por el estándar.
  2. El identificador no entra en conflicto con ninguno de los que se mencionan en la norma como asociados con los encabezados incluidos mediante la sintaxis mencionada anteriormente.
  3. El identificador no comienza con dos guiones bajos.

Un compilador que cumpla con los estándares debe permitir que un programa C declare una variable, función o tipo llamado bit . Si un compilador definiera un tipo bit , pero el código de usuario intentara asignar algún otro significado a ese nombre, los dos usos entrarán en conflicto; Los compiladores que cumplen con los estándares no pueden tener tales conflictos con el código que cumple con los estándares.

Al usar __bit en lugar de bit como nombre para su propio tipo de bit, el compilador se asegura de que el nombre no genere ningún conflicto inadmisible. Si bien tal nombre aún podría entrar en conflicto con un identificador definido por el usuario con el mismo nombre, el estándar permitiría que una implementación haga lo que quiera en caso de un conflicto que involucre dicho nombre. La mayoría de los compiladores se abstendrán de hacer algo totalmente malvado (p. Ej., Fingir compilar normalmente, pero generando un código que no haría nada más que "FRENK RULES" en todas las UARTs adjuntas), pero el estándar permite a los autores del compilador hacer lo que sea. desea , con sin restricción alguna , en caso de que se produzcan tales conflictos de nombres).

    
respondido por el supercat

Lea otras preguntas en las etiquetas