Cro
@Cro

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Nullの未定義

解決したいこと

授業でlinuxのヘッダを用いてC言語のプログラムを行うため自分のpcにその環境を作ろうとしました。vscodeでwslリモート接続を用いてlinux環境のc言語のプログラミングをしようとしています。拡張機能を使ってエラー等に対して波線が出るようにしていたのですが、NULLに対して定義されていないというエラーが出力されました。コンパイルと実行は成功するのですが、常にエラー表示されているのを修正したいです。

該当するソースコード

#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#define BUFSIZE 256
#define TIMEOUT 10

void myalarm(int sec)
{
    static int shared_pid = 0;
    int pid;
    if (shared_pid != 0)
    {
        kill(shared_pid, SIGTERM);
    }
    if ((pid = fork()) == -1)
    {
        perror("fork failed.");
        exit(1);
    }
    if (pid == 0)
    {
        /*child process*/
        sleep(sec);
        kill(getppid(), SIGALRM);
        exit(0);
    }
    else
    {
        /*parent process*/
        shared_pid = pid;
        return;
    }
}

void timeout()
{
    printf("This program is timeout.\n");
    exit(0);
}

int main()
{
    char buf[BUFSIZE];
    if (signal(SIGALRM, timeout) == SIG_ERR)
    {
        perror("signal failed.");
        exit(1);
    }
    myalarm(TIMEOUT);
    while (fgets(buf, BUFSIZE, stdin) != NULL)//このnullに対して「識別子"NULL"は定義されていません」
    {
        printf("echo: %s", buf);
        myalarm(TIMEOUT);
    }
}

自分で試したこと

Nullの定義はstddef.hにあると書いているサイトを見つけたのでincludeしても結果は変わりませんでした。
(ヘッダの中身は下記)

/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */


#ifndef __always_inline
#define __always_inline __inline__
#endif
0

2Answer

includeとかの問題ではなく、VSCodeの設定の問題だと思います。

波線にマウスを当てると出てくるエラーは「NULL未定義」だけでしょうか。

VSCodeにC言語の環境を設定したと思いますが、参考にしたサイトのURLやインストールした拡張機能、また、プロジェクトフォルダーにあると思われる.vscode配下のファイル(隠しフォルダ・隠しファイル)の内容を貼ると解決が早いと思います。

0Like

NULL を null に書きかえて見てください
ちなみにNULL、Null、nullは全て別物です
特に指定しない場合ノーマルのC言語ではNULLは定義されてません

0Like

Comments

  1. 特に指定しない場合ノーマルのC言語ではNULLは定義されてません

    <stdio.h>NULLが定義されているはずです。

Your answer might help someone💌