zyedidia / micro

A modern and intuitive terminal-based text editor
https://micro-editor.github.io
MIT License
24.42k stars 1.16k forks source link

False warning in C++ .hpp file #3137

Open teodor256 opened 5 months ago

teodor256 commented 5 months ago

Description of the problem or steps to reproduce

After adding "#pragma once" in empty .hpp file Micro throws warning "#pragma once in main file". It occurs even if "int main()" is not declared, which is misleading.

Specifications

Commit hash: Version: 2.0.11 OS: Debian GNU/Linux 12 (Bookworm) Terminal: Alacritty

Andriamanitra commented 5 months ago

Micro does not include a C++ compiler, the warning is coming from a linter or a language server you have set up. You should open the issue in their repository.

dmaluka commented 4 months ago

I think @teodor256 did not "set up" anything. The issue is with micro's built-in linter plugin. It uses these commands for checking C or C++ files:

    makeLinter("gcc", "c", "gcc", {"-fsyntax-only", "-Wall", "-Wextra", "%f"}, "%f:%l:%c:.+: %m")
    makeLinter("g++", "c++", "gcc", {"-fsyntax-only","-std=c++14", "-Wall", "-Wextra", "%f"}, "%f:%l:%c:.+: %m")

So the problem is with gcc: it always throws #pragma once in main file if a file containing #pragma once is passed to the gcc command line, i.e. it assumes that header files should never be passed to it on the command line. Which is reasonable in normal case when compiling, but it also happens when gcc is run with -fsyntax-only. So gcc with -fsyntax-only cannot be quite reliably used for checking syntax of header files. And gcc doesn't even provide an explicit option to suppress this warning.

I see it is reported in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89808. See in particular comment https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89808#c11.