C and C++


BADMACRO.STDIO_H : Use of <stdio.h> Input/Output Macro

Summary

A use of one of the following, declared in <stdio.h>, when defined as a macro: clearerr(), ctermid(), cuserid(), fclose(), fdopen(), feof(), ferror(), fflush(), fgetc(), fgetpos(), fgets(), fileno(), flockfile(), fopen(), fprintf(), fputc(), fputs(), fread(), freopen(), fscanf(), fseek(), fseeko(), fsetpos(), ftell(), ftello(), ftrylockfile(), funlockfile(), fwrite(), getc(), getchar(), getc_unlocked(), getchar_unlocked(), getopt(), gets(), getw(), pclose(), perror(), popen(), printf(), putc(), putchar(), putc_unlocked(), putchar_unlocked(), puts(), putw(), remove(), rename(), rewind(), scanf(), setbuf(), setvbuf(), snprintf(), sprintf(), sscanf(), tempnam(), tmpfile(), tmpnam(), ungetc(), vfprintf(), vprintf(), vsnprintf(), vsprintf().

These macros are associated with unspecified, undefined, and implementation-defined behaviors.

If your libc implementation defines these as functions, uses will instead be reported as Use of <stdio.h> Input/Output warnings.

Properties

Class Name Use of <stdio.h> Input/Output Macro
Significance style
Mnemonic BADMACRO.STDIO_H
Categories
MisraC2023 MisraC2023:21.6 The Standard Library input/output functions shall not be used
Misra2012 Misra2012:21.6 The Standard Library input/output functions shall not be used
Misra2004 Misra2004:20.9 The input/output library <stdio.h> shall not be used in production code
AUTOSARC++14 AUTOSARC++14:A1-1-1 All code shall conform to ISO/IEC 14882:2014 - Programming Language C++ and shall not use deprecated features.
  AUTOSARC++14:M27-0-1 The stream input/output library <cstdio> shall not be used.
MisraC++2008 MisraC++2008:27-0-1 The stream input/output library <cstdio> shall not be used.
MisraC++2023 MisraC++2023:4.1.2 Deprecated features should not be used
CWE CWE:676 Use of Potentially Dangerous Function
  CWE:758 Reliance on Undefined, Unspecified, or Implementation-Defined Behavior
JSF++ JSF++:22 The input/output library <stdio.h> shall not be used.
POW10 POW10:8 Limit the use of the preprocessor to file inclusion and simple macros.
JPL JPL:20 Make only very limited use of the C pre-processor.
Availability Available for C and C++.
Enabling Checks for this warning class are disabled by default. To enable them, add the following WARNING_FILTER rule to the project configuration file.
WARNING_FILTER += allow class="Use of <stdio.h> Input/Output Macro"

Example

#include <stdio.h>

int badmacro_stdio_h(FILE *f){
    return fputc('a', f); /* Warning issued here:
                           * - 'Use of <stdio.h> Input/Output Macro' if fputc() implemented as a macro
                           * - Use of <stdio.h> Input/Output if fputc() implemented as a function
                           */
}

Relevant Configuration File Parameters

This class is implemented using a BAD_MACRO_* rule set in the general template configuration file.

The following configuration file parameters affect checks for this warning class.