gpt4 book ai didi

c - 在 C 程序和 shell 脚本之间共享头文件

转载 作者:太空宇宙 更新时间:2023-11-03 23:31:00 29 4
gpt4 key购买 nike

如何与 shell 脚本共享 C 头文件?

shell 脚本通过命名管道与 C 程序通信。让我们假设 C 头文件中定义的枚举 SAMPLE_ONE 由 C 程序写入管道。 shell 脚本从管道中读出枚举的值。有没有办法在 C 程序和 shell 脚本之间共享头文件 - 这样我只需要更新一次头文件而不必在 shell 脚本中编写相同的头常量?

最佳答案

请看下面的例子:

$ cat foo.h
#if 0
shopt -s expand_aliases
alias ENUM='true'
alias COMMA=
#else
# define ENUM enum
# define COMMA ,
#endif

ENUM foo_t
{
FOO_VALUE1=11 COMMA
FOO_VALUE2=22 COMMA
FOO_VALUE3=33 COMMA
};

在 C 文件中使用:

$ cat foo.c
#include <stdio.h>
#include "foo.h"

#define print_enum(x) printf("%s=%d\n", #x, x)

int main()
{
enum foo_t foo = FOO_VALUE1;

print_enum(FOO_VALUE1);
print_enum(FOO_VALUE2);
print_enum(FOO_VALUE3);

return 0;
}

在 Shell 脚本中使用:

$ cat foo.sh
source ./foo.h

enum_names=( ${!FOO_*} )
for name in ${enum_names[@]}; do
echo $name=${!name}
done

让我们测试一下:

$ gcc foo.c
$ ./a.out
FOO_VALUE1=11
FOO_VALUE2=22
FOO_VALUE3=33
$ bash foo.sh
FOO_VALUE1=11
FOO_VALUE2=22
FOO_VALUE3=33

关于c - 在 C 程序和 shell 脚本之间共享头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15538290/

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