0

我在 notepad++ 中编译和运行 C 代码时遇到问题。我正在使用nppexec插件,并在按 F6 后在脚本部分中编写了以下内容:

C:\MinGW\bin\gcc.exe -g "$(FULL_CURRENT_PATH)" -o  "$(CURRENT_DIRECTORY)\$(NAME_PART).exe"

$(CURRENT_DIRECTORY)\$(NAME_PART).exe

按 OK 后,我在控制台上得到以下信息:

C:\MinGW\bin\gcc.exe -g "D:\Silent\Documents\College Stuff\6th sem\NETWORKING lab\substitutioncypher.C" -o "D:\Silent\Documents\College Stuff\6th sem\NETWORKING lab\substitutioncypher.exe"
Process started >>>
<<< Process finished. (Exit code 0)
D:\Silent\Documents\College Stuff\6th sem\NETWORKING lab\substitutioncypher.exe
Process started >>>

substitution.c是我要运行的程序。问题是 gcc 部分工作正常,但我无法从这里执行程序,因为没有响应。

如您所见,它只是说进程开始了,然后什么都没有。对按下的键没有响应,它只是像文本编辑器一样接受所有内容。

如果我转到工作目录并从那里执行程序(双击 exe 文件),那么它似乎运行得很好。问题似乎出在我的脚本或插件中。

拜托,谁能找出我的编译和运行脚本有什么问题?

4

1 回答 1

4

除了@paxdiablo 的回答,您可能还会发现以下 NppExec 脚本对单文件项目很有用:

npp_save
cd "$(CURRENT_DIRECTORY)"
cmd /c del "$(NAME_PART)".o "$(NAME_PART)".exe *.o
C:\MinGW\bin\gcc.exe -g3 -std=c89 -pedantic -Wall -Wextra -Wno-nonnull "$(NAME_PART)".c -o "$(NAME_PART)".exe
npp_run "$(NAME_PART)".exe

第一行保存当前在 notepad++ 中活动的文档。

第二行确保您的当前目录是活动文档之一。这使您可以避免"$(CURRENT_DIRECTORY)"在其余行中使用该变量。

第 3 行从以前成功的编译中删除任何可执行文件和目标文件剩余部分。删除最后一个可执行文件是个好主意,因为如果您不这样做,那么最后一行将导致最后一次编译生成的 .exe 仍然运行,即使您当前的编译失败。失败的编译不会生成 .exe,因此通常您不希望 NppExec 运行以前的 .exe。删除以前生成的目标文件是可选的,但它确实确保它不会影响新的编译(它在多文件项目中更有意义,作为touch命令行工具的替代品)。

第 4 行编译活动文档。随意根据您的需要修改 gcc 的选项。如果您添加C:\MinGW\bin到 WindowsPATH环境变量中,并假设您在系统上只使用一个 gcc 安装,那么您可以跳过绝对路径,而直接编写gcc

最后一行执行生成的可执行文件。该npp_run命令告诉 NppExec 启动一个新的命令提示符窗口,并在其中运行您的程序(除非它是 WIN32 GUI 程序)。与嵌入在记事本++ 中的 NppExec 控制台相比,我个人觉得它更方便。它看起来更自然,也避免了 NppExec 控制台的一些 I/O 重定向问题。

但是,如果您的程序是一个不通过循环与用户交互的控制台应用程序,那么这种方法将导致启动的命令提示符窗口在您的程序终止后立即关闭,而不给您检查其输出的机会。在这种情况下,您应该让您的程序在其终止之前等待用户按下一个键。一种快速而简单的方法是在你的函数和/或语句system("pause");之前放置一个权利(尽管为此编写一个简单的跨平台函数或宏要好得多)。main()returnexit()

您可以通过在 F6 中键入上面的脚本来试验它,<temporary script>并在您对其行为满意时将其永久保存以供一般使用。

在旁注中,您可能还会发现查看这篇文章很有用,我试图解释如何设置 NppExec,以便通过双击任何错误 gcc 跳转到源代码中的相应行编译期间在 NppExec 控制台中吐出。

于 2013-05-17T10:13:23.230 回答