Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

how to suppress warnings that C/C++ functions hava no parameters in vscode with clangd?

description

I try to use vscode and clangd to write C/C++, but for those functions whose parameters are empty, vscode will give "A function declaration without a prototype is deprecated in all versions of C (fix available)" warnings, looks like that:
vscode-warning
and suggested that add a void to the parameter explicitly.
I want to suppress this warning, how should I do it?

environment

vscode

Version: 1.76.0-insider
Commit: c7930ca55d072608625ba76c13b5f9baaf9a2136
Date: 2023-02-10T16:24:38.605Z
Electron: 19.1.9
Chromium: 102.0.5005.194
Node.js: 16.14.2
V8: 10.2.154.23-electron.0
OS: Darwin arm64 22.2.0
Sandboxed: Yes

clangd

v0.1.23

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

related info

config about clangd in vscode settings.json:

"clangd.path": "/opt/homebrew/opt/llvm/bin/clangd",
    "clangd.arguments": [
        "--log=verbose",
        "--pretty",
        "--all-scopes-completion",
        "--completion-style=bundled",
        "--cross-file-rename",
        "--header-insertion=iwyu",
        "--header-insertion-decorators",
        "--background-index",
        "--clang-tidy",
        "--clang-tidy-checks=cppcoreguidelines-*,performance-*,bugprone-*,portability-*,modernize-*,google-*",
        "--fallback-style=Google",
        "-j=2",
        "--pch-storage=memory",
        "--function-arg-placeholders=true",
        "--compile-commands-dir=${workspaceFolder}/build",
        "--completion-parse=auto",
        "--enable-config",
        "--ranking-model=decision_forest",
        "--query-driver=/opt/homebrew/opt/llvm/bin"
    ],
    "clangd.fallbackFlags": [
        "-pedantic",
        "-Wall",
        "-Wextra",
        "-Wcast-align",
        "-Wdouble-promotion",
        "-Wformat=2",
        "-Wimplicit-fallthrough",
        "-Wmisleading-indentation",
        "-Wnon-virtual-dtor",
        "-Wnull-dereference",
        "-Wold-style-cast",
        "-Woverloaded-virtual",
        "-Wpedantic",
        "-Wshadow",
        "-Wunused",
        "-pthread",
        "-fuse-ld=lld",
        "-fsanitize=address",
        "-fsanitize=undefined",
        "-stdlib=libc++",
        "-std=c++17",
    ],
    "clangd.checkUpdates": true,
    "clangd.onConfigChanged": "prompt",
    "clangd.serverCompletionRanking": true,
    "clangd.detectExtensionConflicts": true,
    "editor.suggest.snippetsPreventQuickSuggestions": false

I guess it has something to do with --clang-tidy but don’t know how to set.
Please help me with a clue or a solution, thanks a lot.

>Solution :

As it follows from the warning

"A function declaration without a prototype is deprecated in all
versions of C (fix available)"

you have a C program where functions are declared with empty lists of parameters like for example

void f();

In C opposite to C++ such a declaration means that there is nothing known about the number and types of the function parameters.

So instead you need to declare the function in C like

void f( void );

Or if a function indeed has parameters then you need to specify their types in the function declaration. Such a declaration is named as function prototype. Using the function prototype the compiler is able to determine whether the function is called correctly supplying corresponding types of argument expressions.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading