2017-08-15 1 views
6

J'ai cherché sur SO et googled mais je ne comprends pas leur signification. Quels sont-ils et leurs buts? Quand sont-ils utilisés? Je pense que je suis peut-être trop tard pour les voir dans la programmation moderne et dans ma génération./* ARGSUSED */et autres commentaires spéciaux

Certains d'entre eux AFAIS,

Exemple de code avec /* ARGSUSED */

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <unistd.h> 
#include <pthread.h> 
#define BUFSIZE 1024 
#define TEN_MILLION 10000000L 


/* ARGSUSED */ 
void *threadout(void *args) { 
    char buffer[BUFSIZE]; 
    char *c; 
    struct timespec sleeptime; 

    sleeptime.tv_sec = 0; 
    sleeptime.tv_nsec = TEN_MILLION; 
    snprintf(buffer, BUFSIZE, "This is a thread from process %ld\n", 
      (long)getpid()); 
    c = buffer; 
    /*****************start of critical section ********************/ 
    while (*c != '\0') { 
     fputc(*c, stderr); 
     c++; 
     nanosleep(&sleeptime, NULL); 
    } 
    /*******************end of critical section ********************/ 
    return NULL; 
} 


int main(int argc, char *argv[]) { 
    int error; 
    int i; 
    int n; 
    pthread_t *tids; 

    if (argc != 2){ /* check for valid number of command-line arguments */ 
     fprintf (stderr, "Usage: %s numthreads\n", argv[0]); 
     return 1; 
    } 
    n = atoi(argv[1]); 
    tids = (pthread_t *)calloc(n, sizeof(pthread_t)); 
    if (tids == NULL) { 
     perror("Failed to allocate memory for thread IDs"); 
     return 1; 
    } 
    for (i = 0; i < n; i++) 
     if (error = pthread_create(tids+i, NULL, threadout, NULL)) { 
      fprintf(stderr, "Failed to create thread:%s\n", strerror(error)); 
      return 1; 
     } 
    for (i = 0; i < n; i++) 
     if (error = pthread_join(tids[i], NULL)) { 
      fprintf(stderr, "Failed to join thread:%s\n", strerror(error)); 
      return 1; 
     } 
    return 0; 
} 
+0

S'agit-il d'indicateurs '#define' pour vos bibliothèques spécifiques et similaires? –

+0

'/ * ARGSUSED * /' semble supprimer le paramètre de fonction 'args' non utilisé avertissement. Je me demande pourquoi le code n'a pas utilisé 'void * threadout (void * args) {(void) args;' faire la même chose? – chux

Répondre

7

est spécifique au lint de supprimer les commentaires au sujet de la question particulière

Quelle est la charpie - de wikipedia

Dans la programmation informatique, la fibre est un utilitaire Unix que les drapeaux certains constructions suspectes et non portatives (susceptibles d'être des bogues) dans le code source C ; génériquement, peluche ou un linter est un outil qui signale un usage suspect dans les logiciels écrits dans n'importe quel langage informatique. Le terme de comportement semblable à de la charpie est parfois appliqué au processus de signalant l'utilisation d'un langage suspect. Les outils de type charpie effectuent généralement l'analyse statique du code source. En général, Lint en tant que terme peut également faire référence aux divergences syntaxiques , en particulier dans les langages interprétés comme JavaScript et Python. Par exemple, les contrôleurs de peluches modernes sont souvent utilisés pour trouver le code qui ne correspond pas à certaines directives de style. Parce que ces langues manquent une phase de compilation qui montre une liste d'erreurs avant l'exécution , ils peuvent également être utilisés comme débogueurs simples pour les erreurs courantes (montrant des erreurs syntaxiques comme des erreurs) ou difficiles à trouver des erreurs tels que heisenbugs (attirant l'attention sur un code suspect que "erreurs possibles ").

Article

Description de

/*NOTREACHED*/ Suppresses comments about unreachable code. 
/*VARARGSNumber*/ Suppresses checking the following old style function declaration for varying numbers of arguments, but does check the data type of the first Number arguments. If you do not include a value for Number, the lint command checks no arguments (Number=0). The ANSI function prototypes should use the ellipsis to indicate unspecified parameters rather than this comment mechanism. 
/*ARGSUSED*/ Suppresses warnings about function parameters not used within the function definition. 
/*LINTLIBRARY*/  If you place this comment at the beginning of a file, the lint command does not identify unused functions and function parameters in the file. This is used when running the lint command on libraries. 
/*NOTUSED*/  Suppresses warnings about unused external symbols, functions and function parameters in the file beginning at its point of occurrence. This is a superset of the /*LINTLIBRARY*/ comment directive, but applies also to external symbols. It is useful for suppressing warnings about unused function prototypes and other external object declarations. 
/*NOTDEFINED*/ Suppresses warnings about used, but undefined external symbols and functions in the file beginning at its point of occurrence. 
/*LINTSTDLIB*/ Permits a standard prototype-checking library to be formed from header files by making function prototype declarations appear as function definitions. This directive implicitly activates both the /*NOTUSED*/ and /*LINTLIBRARY*/ comment directives to reduce warning noise levels. 

Peut-être que d'autres outils les utiliser aussi bien.

Vous pouvez également trouver d'autres commentaires spéciaux. Par exemple, de nombreux IDE ont leurs propres jetons placés dans les commentaires - par exemple pour ajouter quelque chose à la liste TO DO

+1

Bonne réponse. Je me demande pourquoi la question a été downvoted, étant donné que je ne trouve pas un doublon ... –