gpt4 book ai didi

c - Makefile C 命令行参数

转载 作者:太空宇宙 更新时间:2023-11-04 02:37:26 25 4
gpt4 key购买 nike

要运行我的程序,unix 命令行是“p2 -s input.txt”

通常(没有 makefile)检查标志 == -s 我的 unix 输入是 -a.out -s input.txt,我的 main.c 是:

int main(int argc, char argv[])
{
if(argv[1] == "-s")
{
printf("The flag is -s\n");
}
else
{
printf("The flag is not -s");
}
return 0;
}

现在,当我使用 makefile 编写代码时,我是否应该更改检查标志的方式?或者我需要更改 main.c 的参数吗?我的生成文件是:

all: p2
p2: main.o functions.o
gcc -o p2 main.o functions.o
main.o: main.c
gcc -c main.c
functions.o: functions.c
gcc -c functions.c
clean:
rm -f *.o core

最佳答案

测试

if(argv[1] == "-s")

在 C 中并不像看起来那样工作。为了直观地工作,C++ 经常被重载,但 C 所做的是:

  1. 比较 argv[1] 的值与 "-s" 的值是否相等>
  2. 第一个的值是靠近栈顶的某个地址(从 argv[] 所在位置开始的一个条目,由 C 运行时库或操作系统设置).
  3. 第二个的值是一个指向字符串常量的指针。
  4. 地址不相等,因此 if 表达式的计算结果为 0(零)。
  5. 因此采用else 分支。

使用 string.h 函数 strcmp() 比较给定地址处的字符串。在 C 语言中,字符串是以 ascii NUL 结尾的字符序列。

另请注意,您对 main() 的定义存在缺陷,如 MikeCAT 所述.

关于c - Makefile C 命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35643453/

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