使用Notepad++编译C语言生命游戏程序遇标签错误的解决方法
解决C语言中"label can only be part of a statement and a declaration is not a statement"错误
这个报错的核心原因很明确:你在某个标签(比如goto跳转的标签,或者switch里的case标签)后面直接写了变量声明,而你的编译器默认遵循较老的C89标准——这个标准要求标签后面必须紧跟可执行语句,变量声明不算可执行语句,所以编译器就抛出了错误。
给你两个简单的解决办法,选哪个都行:
方法一:在标签和变量声明之间加个空语句
如果不想修改编译标准,就在标签后面加一个单独的分号(空语句),让编译器识别到标签后面有合法的可执行语句,再跟变量声明就没问题了。
比如原来的代码是:
some_label: int prozent = Einlesen("Prozentsatz der Lebenden Zellen? Wertebereich: 0 bis 100\nEingabe:", 0, 100, 5);
修改后:
some_label: ; // 空语句,作为标签后的第一个可执行语句 int prozent = Einlesen("Prozentsatz der Lebenden Zellen? Wertebereich: 0 bis 100\nEingabe:", 0, 100, 5);
方法二:用C99及以后的标准编译
C99及更新的标准已经允许变量声明出现在代码块的任何位置,包括标签后面。你只需要在编译命令里加上指定标准的参数就行。比如用GCC编译器的话,把编译命令改成:
gcc -std=c99 your_game_of_life.c -o game_of_life
(把your_game_of_life.c换成你的实际源文件名,game_of_life是生成的可执行文件名)
个人更推荐第二种方法,毕竟C99是20多年前的标准了,支持它的编译器非常普遍,用新标准能让你写代码更灵活,不用再纠结变量声明的位置。
内容的提问来源于stack exchange,提问作者R.RiKo




