gpt4 book ai didi

为 posix 的 eclipse 配置 C99

转载 作者:行者123 更新时间:2023-11-30 15:12:43 25 4
gpt4 key购买 nike

我正在练习信号,并且已经从 gcc 转移到 ubuntu 上的 eclipse,并且遇到了一些问题。下面的 gcc 代码可以很好地编译 eclipse 我收到错误“错误:从类型‘void (*)(int)’分配给类型‘union’时,类型不兼容”

在网上查看时,我发现由于编译器使用 C99 之前的版本而可能会出现错误。所以我尝试让 Eclipse 编译为 C99 版本,我发现下面的链接 How do you configure GCC in Eclipse to use C99?

我尝试按照 SO 链接中的建议进行更改,但目前我的其他标志有一行,上面写着“-c -fmessage-length =0”

如果我按照帖子的建议在该行之前或之后添加 -std=c99 ,编译器将无法找到文件本身

我假设由于使用 C99 之前版本的编译器而出现错误。如果我追寻的方向错误,请纠正我,如果正确的话,将 -std=c99 添加到标志选项以使 eclipse 使用 C99 的正确方法是什么

编辑:根据更改 sig_handler 参数时的答案,我能够在不添加 -std=c99 标志的情况下进行编译,但是按照建议添加该标志后我遇到了编译错误。下面是编译行

gcc -O0 -g3 -Wall -c -fmessage-length=0 -std=c99 -MMD -MP -MF"

`odd_process.d" -MT"odd_process.d" -o "odd_process.o" "../odd_process.c`"
../odd_process.c: In function ‘main’:
../odd_process.c:13:2: error: unknown type name ‘sigset_t’
../odd_process.c:14:19: error: storage size of ‘sa’ isn’t know

n

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void sighandler(int sig)
{
printf("signal has been caught \n ");

}

int main(void)
{
sigset_t block_signal, empty_signal;
struct sigaction sa;

pid_t childid;
int i;

sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;

**/*for below line while running on eclipse I see error which says*/
/***error: incompatible types when assigning to type ‘union <anonymous>’ from type ‘void (*)(int)’** */**

**sa.__sigaction_handler = sighandler;**

stdbuf(stdout, NULL);

if (sigaction(SIGCHLD, &sa, NULL) == -1)
{
printf("value not passed to signal handler \n ");
}

sigemptyset(&block_signal);
sigaddset(&block_signal, SIGCHLD);

if (sigprocmask(SIG_SETMASK, &block_signal, NULL) == -1)
{
printf("error occurred while setting signal mask \n");
}

childid = fork();

printf("value of child id is -- %d ", childid);

switch(childid)
{
case -1:
printf("Error condition child creation did not happen properly \n");
exit(-1);
case 0:
printf(" Child got created and will print odd number !!! ");
sleep(5);
exit(1);
default:
printf(" parent gets created !!! \n ");
break;
}

sigemptyset(&empty_signal);
sigsuspend(&empty_signal);
printf(" parent will print \n ");

for(i = 0; i < 10; i++)
{
printf("%d ", i);
}

printf("\n");

return EXIT_SUCCESS;
}

最佳答案

修改CFLAGS,(打开所需的项目)。

  1. 单击菜单项项目
  2. 单击下拉菜单项属性
  3. 单击左侧窗口中的C/C++Build 选项卡 - 展开
  4. 单击展开的 C/C++Build 中的Settings 选项卡
  5. 单击第二列中的 GCC C Comiler 选项卡 - 展开
  6. 点击第二列中的其他选项卡以选择第三列
  7. 选择“其他标志”行
  8. 输入其他标志,例如 -std=gnu99
  9. 点击确定

这可能需要为每个项目完成

关于为 posix 的 eclipse 配置 C99,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34960039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com