甚至不太确定我的问题是什么。简而言之,对于一个类,我应该向这个 c 文件添加一些功能,并且它附带了一个方便的 makefile。
CFLAGS=-DUNIX -lreadline -lcurses -ansi -pedantic-errors
DEBUG=-g
#DEBUG=
all: shell
shell: shell.c parse.c parse.h
gcc $(CFLAGS) $(DEBUG) shell.c parse.c -o shell
clean:
rm -f shell *~
我必须向 shell.c 添加功能。我是 C 的新手(通常使用 C++ 或 C#),所以我在一个单独的小 tests.c 文件中测试一些小东西。诸如查看某些系统调用返回的确切内容,如何正确打印它们等等。无论如何,tests.c 似乎符合不同的 c 编译器标准,或者我编译错误。如果我不小心使用//注释掉某些东西或在 shell.c 开头以外的地方声明了一个变量,编译器就会对我大喊大叫。它不关心 tests.c。
我用“gcc tests.c -o tests”编译 tests.c 如果我使用“gcc shell.c parse.c -o shell”编译 shell,它编译得很好,但运行它只会给我一个段错误。我很想问问我的助教这件事,但每次我给他一些东西时他都会回答一个完全不同的问题......
对这里发生的事情有什么想法吗?也许至少在正确的方向上有一点?
最佳答案
问题是您的 makefile 包含编译器的 -ansi -pedantic-errors
标志。这迫使它使用非常旧的 C 版本。也许这个 Makefile 是由您的导师提供的,他想要这样?这并不少见。
要使用这些新功能(//
注释、 block 中任意位置的自动变量)只需删除这两个标志。如果您有足够的自由,我建议您也使用 -std=c99 -Wall
。
关于C gcc编译问题和makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4811954/