¿Qué son las fallas anotadas y el método parcialmente anotado en la redacción de Clang?

 C Programming >> Programación C >  >> Tags >> Clang
¿Qué son las fallas anotadas y el método parcialmente anotado en la redacción de Clang?

Por cierto, del atributo estándar de C++17 02 está disponible para indicar que no es una advertencia cuando el código está destinado a fallar. solo usa el nuevo atributo:

#include <iostream>
enum class Layers {
    Undefined, Back, Middle, Front
};

int main() {

    Layers layer{ Layers::Undefined };
    // ...
    switch (layer)
    {
    case Layers::Back:
        std::cout << "Back layer processed" << std::endl;
        break;
    case Layers::Middle:
        std::cout << "Middle layer partially processed" << std::endl;
        [[fallthrough]]; //(dont forget the semicolon) Suppressed warning
    case Layers::Front:
        std::cout << "And some code for middle and front layers" << std::endl;
        break;
    case Layers::Undefined:
        std::cout << "Undefined layer" << std::endl;
    }
}

En este caso, "anotado" probablemente se refiere a algunos comentarios especiales que el compilador reconocerá. Para el "fallo sin anotaciones", por ejemplo (como en su codenippet), el bit de código:

case 0:
    n += 100;
case 1:
    //  ...

suele ser un error, debido a que el programador olvidó un 28 .Entonces el compilador emitirá una advertencia. En algunos casos raros (el dispositivo de Duff, por ejemplo), la interrupción que falta es intencional; la "anotación" es una forma de decirle al compilador (ya otras personas que lean el código) que es intencional y que no emita la advertencia.

De su fragmento de código de ejemplo, deduzco que clang está usando la sintaxis de atributo newC++11, en lugar de los comentarios especiales tradicionales. (El atributo aquí es el 31 declaración.)

A juzgar por su fragmento, deduzco que el primer mensaje se usa si la función no contiene atributos (y la mayoría no lo hará, ya que esta es una característica nueva de C++ 11), y el segundo se usará si los contiene. (Desde el punto de vista del usuario:si se están utilizando atributos, uno esperaría que estuvieran presentes si la ruptura faltante fuera intencional. Si no es así, el hecho de que no estén presentes en una ruptura faltante no significa que no haya sido así). intencional; tienes que mirar más de cerca.)

Traducir los mensajes de error a otro idioma es probablemente complicado, ya que depende del término aceptado para la nueva característica de C++11; dado que es una característica nueva, es posible que no haya un término establecido. También es interesante notar que clang usa "anotado", aunque el estándar nunca usa el término "anotar" o "anotación". Por el contexto y su ejemplo, está claro que "anotado" significa "tiene atributos de C++ 11 de una forma particular", pero más allá de eso, probablemente tendrá que adivinar un poco (o preguntar en un foro en el idioma de destino :en el pasado, fr.comp.lang.c++ era muy bueno para francés, por ejemplo).


"Anotar" en este caso le dice al compilador que intentó omitir el descanso en el cambio de caso. De esta manera, el compilador le muestra lugares que quizás haya olvidado 43 . Luego puede verificarlo nuevamente y confirmar si eso fue lo que se pretendía.