在notepad ++中编译和运行C代码

时间:2013-05-17 08:53:08

标签: c notepad++ nppexec

我在编写和运行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文件),那么它似乎运行得很好。问题似乎出现在我的脚本或插件中。

请问,任何人都可以找出我的编译和运行脚本有什么问题吗?

1 个答案:

答案 0 :(得分: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

第1行保存当前在记事本++中处于活动状态的文档。

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

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

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

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

但是,如果您的程序是一个不与用户交互的控制台应用程序通过循环说,那么这种方法将导致启动的命令提示符窗口在程序终止后立即关闭,而不是让您有机会检查它的输出。在这种情况下,您应该让程序等待用户在终止之前按下某个键。一种快速而肮脏的方法是将system("pause");放在main()函数的return和/或exit()语句之前(尽管写一个简单的十字架会好得多) -platform函数或宏())。

您可以在F6的<temporary script>中输入以上脚本进行试验,并在您对其行为感到满意时将其永久保存以供一般使用。

另外,您可能会发现查看this post很有用,我试图解释如何设置NppExec以便它跳转到源代码中的相应行,通过双 - 在编译期间点击NppExec控制台中的任何错误gcc spits。