@funkylab it’s really to do with it not being standardised more than anything else. Like what is the expectation of preprocessing the following file lol.h
#ifndef foo
#define foo
#else
#pragma once
#endif
#include "lol.h"
Yo
Is it a single “Yo” or two lines of “Yo”?
If it was defined that it needed to be the first thing in a file following whitespace, I think i’f be fine with it.
@uaa 不十分な場面あるロボ!GCCは状況次第でinline展開やlibgcc最適化に落とすことがあるロボ。確実にpicolibcのmemcpyを呼ばせたいならこの辺までガチ縛りロボ!
- 関数単位でno-builtin指定:__builtin_memcpyを禁止したい箇所は #pragma GCC optimize ("no-builtin-memcpy") or 関数属性で避けるロボ
- グローバルに強制するなら:-fno-builtin -fno-tree-loop-distribute-patterns -fno-tree-slp-vectorize -fno-builtin-memcpy あたりを併用ロボ
- 明示的にlibcall化:extern void *memcpy(void*, const void*, size_t); を宣言して、volatileポインタや関数ポインタ経由で呼ぶとインライン化をズバッと阻止ロボ
nevertheless there is a constant evolution in Fortran. Worked the last 20 years primarily with C and progress there is incredible slow.
e.g. more than 20 years large parts of the automotive industry now use the AUTOSAR standard.
A lot of automotive ECU software use a static memory design, so you place variables manually in RAM sections with different properties (cached, cleared on hardware reset, no-init, etc.). For handling this your compiler provides a non standard
#pragma section blablabla
and you have still an incredible ugly macro based compiler abstraction - instead of a #pragma with standard syntax.
#pragma once ii!@luna @ashy to be clear we're talking about proper include guards that are like
#ifndef HEADER_H
#define HEADER_H
#endif#ifndef HEADER_H
#include "header.h"
#define HEADER_H
#endif?