Avoid multiple definition of macro __fl_attr()

This could happen if both FL/fl_ask.H and fluid/Fl_Type.h were
included in the same file.
This commit is contained in:
Albrecht Schlosser 2021-10-17 12:24:39 +02:00
parent 6c2bc5b02f
commit 8863ef7901
3 changed files with 47 additions and 24 deletions

View File

@ -22,6 +22,7 @@
# define fl_ask_H
# include "Enumerations.H"
# include "fl_attr.h"
class Fl_Widget;
/** Different system beeps available.
@ -35,14 +36,6 @@ enum Fl_Beep {
FL_BEEP_NOTIFICATION ///< Notification beep.
};
# ifdef __GNUC__
/* the GNUC-specific attribute appearing below in prototypes with a variable list of arguments
helps detection of mismatches between format string and argument list at compilation time */
# define __fl_attr(x) __attribute__ (x)
# else
# define __fl_attr(x)
# endif // __GNUC__
FL_EXPORT void fl_beep(int type = FL_BEEP_DEFAULT);
FL_EXPORT void fl_message(const char *,...) __fl_attr((__format__ (__printf__, 1, 2)));
FL_EXPORT void fl_alert(const char *,...) __fl_attr((__format__ (__printf__, 1, 2)));

34
FL/fl_attr.h Normal file
View File

@ -0,0 +1,34 @@
/*
* Function attribute declarations for the Fast Light Tool Kit (FLTK).
*
* Copyright 1998-2021 by Bill Spitzak and others.
*
* This library is free software. Distribution and use rights are outlined in
* the file "COPYING" which should have been included with this file. If this
* file is missing or damaged, see the license at:
*
* https://www.fltk.org/COPYING.php
*
* Please see the following page on how to report bugs and issues:
*
* https://www.fltk.org/bugs.php
*/
#ifndef _FL_fl_attr_h_
#define _FL_fl_attr_h_
/*
The GNUC-specific attribute appearing below in prototypes with a variable
list of arguments helps detection of mismatches between format string and
argument list at compilation time.
Examples: see fl_ask.H
*/
#ifdef __GNUC__
# define __fl_attr(x) __attribute__ (x)
#else
# define __fl_attr(x)
#endif
#endif /* !_FL_fl_attr_h_ */

View File

@ -1,16 +1,7 @@
//
// Widget type header file for the Fast Light Tool Kit (FLTK).
//
// Each object described by Fluid is one of these objects. They
// are all stored in a double-linked list.
//
// There is also a single "factory" instance of each type of this.
// The method "make()" is called on this factory to create a new
// instance of this object. It could also have a "copy()" function,
// but it was easier to implement this by using the file read/write
// that is needed to save the setup anyways.
//
// Copyright 1998-2016 by Bill Spitzak and others.
// Copyright 1998-2021 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
@ -23,11 +14,22 @@
// https://www.fltk.org/bugs.php
//
// Each object described by Fluid is one of these objects. They
// are all stored in a double-linked list.
//
// There is also a single "factory" instance of each type of this.
// The method "make()" is called on this factory to create a new
// instance of this object. It could also have a "copy()" function,
// but it was easier to implement this by using the file read/write
// that is needed to save the setup anyways.
#include <FL/Fl_Widget.H>
#include <FL/Fl_Menu.H>
#include <FL/Fl_Plugin.H>
#include "Fluid_Image.h"
#include <FL/fl_draw.H>
#include <FL/fl_attr.h>
#include <stdarg.h>
#include <stdlib.h>
@ -859,12 +861,6 @@ void reveal_in_browser(Fl_Type*);
int has_toplevel_function(const char *rtype, const char *sig);
// file operations:
# ifdef __GNUC__
# define __fl_attr(x) __attribute__ (x)
# else
# define __fl_attr(x)
# endif // __GNUC__
void write_word(const char *);
void write_string(const char *,...) __fl_attr((__format__ (__printf__, 1, 2)));
int write_file(const char *, int selected_only = 0);