From 4ff3f205408ff8bb413d69151105d301858136ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=9C=E9=83=A8=E6=98=8C=E5=B9=B3?= Date: Fri, 10 Apr 2020 14:11:40 +0900 Subject: add #include guard hack According to MSVC manual (*1), cl.exe can skip including a header file when that: - contains #pragma once, or - starts with #ifndef, or - starts with #if ! defined. GCC has a similar trick (*2), but it acts more stricter (e. g. there must be _no tokens_ outside of #ifndef...#endif). Sun C lacked #pragma once for a looong time. Oracle Developer Studio 12.5 finally implemented it, but we cannot assume such recent version. This changeset modifies header files so that each of them include strictly one #ifndef...#endif. I believe this is the most portable way to trigger compiler optimizations. [Bug #16770] *1: https://docs.microsoft.com/en-us/cpp/preprocessor/once *2: https://gcc.gnu.org/onlinedocs/cppinternals/Guard-Macros.html --- internal/load.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'internal/load.h') diff --git a/internal/load.h b/internal/load.h index febf9eb200..37c1dee351 100644 --- a/internal/load.h +++ b/internal/load.h @@ -1,4 +1,6 @@ -/** \noop-*-C-*-vi:ft=c +#ifndef INTERNAL_LOAD_H /*-*-C-*-vi:se ft=c:*/ +#define INTERNAL_LOAD_H +/** * @file * @author Ruby developers * @copyright This file is a part of the programming language Ruby. @@ -7,8 +9,6 @@ * file COPYING are met. Consult the file for details. * @brief Internal header for require. */ -#ifndef INTERNAL_LOAD_H -#define INTERNAL_LOAD_H #include "ruby/ruby.h" /* for VALUE */ /* load.c */ -- cgit v1.2.3