提交 103eb04f 创建 作者: 宋海霞's avatar 宋海霞

init

上级
/Debug
/Release
*.bak
*.o
*.exe
\ No newline at end of file
image: "registry.cn-hangzhou.aliyuncs.com/engintime/ubuntu_16.04_program:latest"
stages:
- make
- case1
before_script:
- flex -b -oyylex.c lex.txt
- bison -y --defines=ytab.h --report=all --report-file=y.output.txt --output=ytab.c --xml=y.output.xml yacc.txt
- make
.codecode-runner: &codecode-runner
tags:
- ubuntu-16.04
- short-job
make:
stage: make
<<: *codecode-runner
script:
- gcc --version
- execscore.sh 60
only:
- master
case1:
stage: case1
<<: *codecode-runner
script:
- ./app input1.txt > user_output1.txt
- diff output1.txt user_output1.txt -b -B -y -i -W 100
- execscore.sh 100
only:
- master
<?xml version="1.0" encoding="UTF-8"?>
<!--
bison.xsl - common templates for Bison XSLT.
Copyright (C) 2007, 2008 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:bison="http://www.gnu.org/software/bison/">
<xsl:key
name="bison:symbolByName"
match="/bison-xml-report/grammar/nonterminals/nonterminal"
use="@name"
/>
<xsl:key
name="bison:symbolByName"
match="/bison-xml-report/grammar/terminals/terminal"
use="@name"
/>
<xsl:key
name="bison:ruleByNumber"
match="/bison-xml-report/grammar/rules/rule"
use="@number"
/>
<xsl:key
name="bison:ruleByLhs"
match="/bison-xml-report/grammar/rules/rule[
@usefulness != 'useless-in-grammar']"
use="lhs"
/>
<xsl:key
name="bison:ruleByRhs"
match="/bison-xml-report/grammar/rules/rule[
@usefulness != 'useless-in-grammar']"
use="rhs/symbol"
/>
<!-- For the specified state, output: #sr-conflicts,#rr-conflicts -->
<xsl:template match="state" mode="bison:count-conflicts">
<xsl:variable name="transitions" select="actions/transitions"/>
<xsl:variable name="reductions" select="actions/reductions"/>
<xsl:variable
name="terminals"
select="
$transitions/transition[@type='shift']/@symbol
| $reductions/reduction/@symbol
"
/>
<xsl:variable name="conflict-data">
<xsl:for-each select="$terminals">
<xsl:variable name="name" select="."/>
<xsl:if test="generate-id($terminals[. = $name][1]) = generate-id(.)">
<xsl:variable
name="shift-count"
select="count($transitions/transition[@symbol=$name])"
/>
<xsl:variable
name="reduce-count"
select="count($reductions/reduction[@symbol=$name])"
/>
<xsl:if test="$shift-count > 0 and $reduce-count > 0">
<xsl:text>s</xsl:text>
</xsl:if>
<xsl:if test="$reduce-count > 1">
<xsl:text>r</xsl:text>
</xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="string-length(translate($conflict-data, 'r', ''))"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="string-length(translate($conflict-data, 's', ''))"/>
</xsl:template>
</xsl:stylesheet>
3 * 5
\ No newline at end of file
Compressed tables always back up.
%{
#include "ytab.h"
#include "main.h"
int yylex(void);
int yywrap(void);
%}
%%
%%
int yywrap(void)
{
return 1;
}
<?xml version="1.0" encoding="gb2312"?>
<OSLProject Version="1.00" Name="lex_yacc" SubjectID="11c951f4-9b13-40e1-8b73-39ba7d73b89b" ProjectTemplateID="419bab45-a766-4de8-829e-a60059af6849">
<Configurations>
<Configuration Name="Debug" CommandArgument="sample.txt">
<Tool Name="PreBuildEventTool"/>
<Tool Name="CustomBuildTool"/>
<Tool Name="GCCCompilerTool" PreprocessorDefinitions="_DEBUG" GenerateDebugInformation="-1"/>
<Tool Name="PreLinkEventTool"/>
<Tool Name="GCCLinkerTool" MapFileName="" AdditionalDependencies="" DisplayVerbose="0" AdditionalOptions=""/>
<Tool Name="PostBuildEventTool"/>
</Configuration>
<Configuration Name="Release">
<Tool Name="PreBuildEventTool"/>
<Tool Name="CustomBuildTool"/>
<Tool Name="GCCCompilerTool" PreprocessorDefinitions="NDEBUG"/>
<Tool Name="PreLinkEventTool"/>
<Tool Name="GCCLinkerTool"/>
<Tool Name="PostBuildEventTool"/>
</Configuration>
</Configurations>
<Files>
<Filter Name="Lex 输入文件">
<File RelativePath=".\lex.txt">
<FileConfiguration Name="Debug">
<Tool Name="CustomBuildTool" CommandLine="flex.exe -b -oyylex.c &quot;$(InputPath)&quot;" Description="正在使用 Lex 生成分析程序......" Outputs="lex.backup"/>
</FileConfiguration>
</File>
</Filter>
<Filter Name="TINY 语言样例">
<File RelativePath=".\sample.txt">
</File>
</Filter>
<Filter Name="Yacc 输入文件">
<File RelativePath=".\yacc.txt">
<FileConfiguration Name="Debug">
<Tool Name="CustomBuildTool" CommandLine="bison.exe -y --defines=ytab.h --report=all --report-file=y.output.txt --output=ytab.c --xml=y.output.xml $(InputFileName)&#xA;if %errorlevel% gtr 0 goto bad&#xA;&#xA;xsltproc.exe xml2xhtml.xsl y.output.xml &gt;y.output.html&#xA;if %errorlevel% gtr 0 goto bad&#xA;&#xA;xsltproc.exe xml2dot.xsl y.output.xml &gt;y.dot.txt&#xA;if %errorlevel% gtr 0 goto bad&#xA;&#xA;&quot;$(CPLInstallDir)Tools\Graphviz\bin\dotty.exe&quot; y.dot.txt&#xA;if %errorlevel% gtr 0 goto bad&#xA;&#xA;:good&#xA;exit /B 0&#xA;:bad&#xA;exit /B 1" Description="正在使用 Yacc 生成分析程序..." Outputs="y.output.xml"/>
</FileConfiguration>
<FileConfiguration Name="Release">
<Tool Name="CustomBuildTool" CommandLine="bison.exe -y --defines=ytab.h --report=all --report-file=y.output.txt --output=ytab.c --xml=y.output.xml $(InputFileName)&#xA;if %errorlevel% gtr 0 goto bad&#xA;&#xA;xsltproc.exe xml2xhtml.xsl y.output.xml &gt;y.output.html&#xA;if %errorlevel% gtr 0 goto bad&#xA;&#xA;xsltproc.exe xml2dot.xsl y.output.xml &gt;y.dot.txt&#xA;if %errorlevel% gtr 0 goto bad&#xA;&#xA;&quot;$(CPLInstallDir)Tools\Graphviz\bin\dotty.exe&quot; y.dot.txt&#xA;if %errorlevel% gtr 0 goto bad&#xA;&#xA;:good&#xA;exit /B 0&#xA;:bad&#xA;exit /B 1" Description="正在使用 Yacc 生成分析程序..." Outputs="y.output.xml"/>
</FileConfiguration>
</File>
</Filter>
<Filter Name="头文件">
<File RelativePath=".\main.h">
</File>
<File RelativePath=".\ytab.h">
</File>
</Filter>
<Filter Name="报告">
<File RelativePath=".\y.dot.txt">
</File>
<File RelativePath=".\y.output.html">
</File>
<File RelativePath=".\y.output.txt">
</File>
</Filter>
<Filter Name="源文件" Filter="cpp;c;cc;cxx">
<File RelativePath=".\ytab.c">
</File>
<File RelativePath=".\yylex.c">
</File>
</Filter>
<File RelativePath=".\readme.md">
</File>
</Files>
</OSLProject>
添加文件
//lex.l和yacc.y共同使用的头文件
#ifndef MAIN_HPP
#define MAIN_HPP
#include <stdio.h>//printf和FILE要用的
#endif
DIR_INC = .
DIR_SRC = .
DIR_OBJ = .
DIR_BIN = .
SRC = $(wildcard ${DIR_SRC}/*.c)
OBJ = $(patsubst %.c,${DIR_OBJ}/%.o,$(notdir ${SRC}))
TARGET = app
BIN_TARGET = ${DIR_BIN}/${TARGET}
CC = gcc
CFLAGS = -g -w -fmax-errors=10 -std=c99 -fsigned-char -I${DIR_INC} -D CODECODE_CI
${BIN_TARGET}:${OBJ}
$(CC) $(OBJ) -l"fl" -o $@
${DIR_OBJ}/%.o:${DIR_SRC}/%.c
$(CC) $(CFLAGS) -c $< -o $@
\ No newline at end of file
15
\ No newline at end of file
# 教师参考答案
请教师用户首先访问[教师项目群组](https://www.codecode.net/engintime/cp-lab/teachers-packet),申请权限并审核通过后,再[domain relative url](engintime/cp-lab/teachers-packet/Lab09.git)访问本项目的参考答案
\ No newline at end of file
{ Sample program
int TINY language -
computes factorial
}
read x; { input an integer }
if 0 < x then { don't compute if x <= 0 }
fact := 1;
repeat
fact := fact * x;
x := x - 1
until
x = 0;
write fact { output factorial of x }
end
# required metadata
sonar.language=c
# path to source directories (required)
sonar.sources=./
# path to the build artifact
sonar.artifact.path=build/app
# paths to the reports
sonar.c.cppcheck.reportPath=./build/cppcheck-report.xml
#sonar.c.pclint.reportPath=./build/pclint-report.xml
#sonar.c.coverage.reportPath=./build/gcovr-report*.xml
#sonar.c.coverage.itReportPath=./build/gcovr-report*.xml
#sonar.c.coverage.overallReportPath=./build/gcovr-report*.xml
sonar.c.valgrind.reportPath=./build/valgrind-report.xml
sonar.c.vera.reportPath=./build/vera-report.xml
#sonar.c.rats.reportPath=./build/rats-report.xml
#sonar.c.xunit.reportPath=./build/xunit-report.xml
#sonar.c.drmemory.reportPath=./build/drmemory-logs/**/results.txt
sonar.c.includeDirectories=/usr/include/,/usr/include/linux,/usr/include/x86_64-linux-gnu/bits,/usr/include/x86_64-linux-gnu/sys,/usr/include/c++/5/tr1,./
<?xml version="1.0" encoding="UTF-8"?>
<!--
xml2dot.xsl - transform Bison XML Report into DOT.
Copyright (C) 2007, 2008 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Written by Wojciech Polak <polak@gnu.org>.
-->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:bison="http://www.gnu.org/software/bison/">
<xsl:import href="bison.xsl"/>
<xsl:output method="text" encoding="UTF-8" indent="no"/>
<xsl:template match="/">
<xsl:apply-templates select="bison-xml-report"/>
</xsl:template>
<xsl:template match="bison-xml-report">
<xsl:apply-templates select="automaton"/>
</xsl:template>
<xsl:template match="automaton">
<xsl:text>digraph Automaton {&#10;</xsl:text>
<xsl:apply-templates select="state"/>
<xsl:text>}&#10;</xsl:text>
</xsl:template>
<xsl:template match="automaton/state">
<xsl:call-template name="output-node">
<xsl:with-param name="number" select="@number"/>
<xsl:with-param name="label">
<xsl:value-of select="@number"/>
<xsl:apply-templates select="itemset/item"/>
</xsl:with-param>
</xsl:call-template>
<xsl:apply-templates select="actions/transitions"/>
</xsl:template>
<xsl:template match="actions/transitions">
<xsl:apply-templates select="transition"/>
</xsl:template>
<xsl:template match="item">
<xsl:apply-templates select="key('bison:ruleByNumber', @rule-number)">
<xsl:with-param name="point" select="@point"/>
</xsl:apply-templates>
<xsl:apply-templates select="lookaheads"/>
</xsl:template>
<xsl:template match="rule">
<xsl:param name="point"/>
<xsl:text>&#10;</xsl:text>
<xsl:value-of select="lhs"/>
<xsl:text> -&gt;</xsl:text>
<xsl:if test="$point = 0">
<xsl:text> .</xsl:text>
</xsl:if>
<xsl:for-each select="rhs/symbol|rhs/empty">
<xsl:apply-templates select="."/>
<xsl:if test="$point = position()">
<xsl:text> .</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template match="symbol">
<xsl:text> </xsl:text>
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="empty"/>
<xsl:template match="lookaheads">
<xsl:text>[</xsl:text>
<xsl:apply-templates select="symbol"/>
<xsl:text>]</xsl:text>
</xsl:template>
<xsl:template match="lookaheads/symbol">
<xsl:value-of select="."/>
<xsl:if test="position() != last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="transition">
<xsl:call-template name="output-edge">
<xsl:with-param name="src" select="../../../@number"/>
<xsl:with-param name="dst" select="@state"/>
<xsl:with-param name="style">
<xsl:choose>
<xsl:when test="@symbol = 'error'">
<xsl:text>dotted</xsl:text>
</xsl:when>
<xsl:when test="@type = 'shift'">
<xsl:text>solid</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>dashed</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
<xsl:with-param name="label">
<xsl:if test="not(@symbol = 'error')">
<xsl:value-of select="@symbol"/>
</xsl:if>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="output-node">
<xsl:param name="number"/>
<xsl:param name="label"/>
<xsl:text> </xsl:text>
<xsl:value-of select="$number"/>
<xsl:text> [label="</xsl:text>
<xsl:call-template name="escape">
<xsl:with-param name="subject" select="$label"/>
</xsl:call-template>
<xsl:text>"]&#10;</xsl:text>
</xsl:template>
<xsl:template name="output-edge">
<xsl:param name="src"/>
<xsl:param name="dst"/>
<xsl:param name="style"/>
<xsl:param name="label"/>
<xsl:text> </xsl:text>
<xsl:value-of select="$src"/>
<xsl:text> -> </xsl:text>
<xsl:value-of select="$dst"/>
<xsl:text> [style=</xsl:text>
<xsl:value-of select="$style"/>
<xsl:if test="$label and $label != ''">
<xsl:text> label="</xsl:text>
<xsl:call-template name="escape">
<xsl:with-param name="subject" select="$label"/>
</xsl:call-template>
<xsl:text>"</xsl:text>
</xsl:if>
<xsl:text>]&#10;</xsl:text>
</xsl:template>
<xsl:template name="escape">
<xsl:param name="subject"/> <!-- required -->
<xsl:call-template name="string-replace">
<xsl:with-param name="subject">
<xsl:call-template name="string-replace">
<xsl:with-param name="subject">
<xsl:call-template name="string-replace">
<xsl:with-param name="subject" select="$subject"/>
<xsl:with-param name="search" select="'\'"/>
<xsl:with-param name="replace" select="'\\'"/>
</xsl:call-template>
</xsl:with-param>
<xsl:with-param name="search" select="'&quot;'"/>
<xsl:with-param name="replace" select="'\&quot;'"/>
</xsl:call-template>
</xsl:with-param>
<xsl:with-param name="search" select="'&#10;'"/>
<xsl:with-param name="replace" select="'\n'"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="string-replace">
<xsl:param name="subject"/>
<xsl:param name="search"/>
<xsl:param name="replace"/>
<xsl:choose>
<xsl:when test="contains($subject, $search)">
<xsl:variable name="before" select="substring-before($subject, $search)"/>
<xsl:variable name="after" select="substring-after($subject, $search)"/>
<xsl:value-of select="$before"/>
<xsl:value-of select="$replace"/>
<xsl:call-template name="string-replace">
<xsl:with-param name="subject" select="$after"/>
<xsl:with-param name="search" select="$search"/>
<xsl:with-param name="replace" select="$replace"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$subject"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
差异被折叠。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:bison="http://www.gnu.org/software/bison/">
<head>
<title>yacc.txt - GNU Bison XML Automaton Report</title>
<style type="text/css">
body {
font-family: "Nimbus Sans L", Arial, sans-serif;
font-size: 9pt;
}
a:link {
color: #1f00ff;
text-decoration: none;
}
a:visited {
color: #1f00ff;
text-decoration: none;
}
a:hover {
color: red;
}
#menu a {
text-decoration: underline;
}
.i {
font-style: italic;
}
.pre {
font-family: monospace;
white-space: pre;
}
ol.decimal {
list-style-type: decimal;
}
ol.lower-alpha {
list-style-type: lower-alpha;
}
.point {
color: #cc0000;
}
#footer {
margin-top: 3.5em;
font-size: 7pt;
}
</style>
</head>
<body><h1>GNU Bison XML Automaton Report</h1><p>
input grammar: <span class="i">yacc.txt</span></p>
<h3>Table of Contents</h3><ul id="menu"><li><a href="#reductions">Reductions</a><ul class="lower-alpha"><li><a href="#nonterminals_useless_in_grammar">Nonterminals useless in grammar</a></li><li><a href="#terminals_unused_in_grammar">Terminals unused in grammar</a></li><li><a href="#rules_useless_in_grammar">Rules useless in grammar</a></li></ul></li><li><a href="#conflicts">Conflicts</a></li><li><a href="#grammar">Grammar</a><ul class="lower-alpha"><li><a href="#grammar">Itemset</a></li><li><a href="#terminals">Terminal symbols</a></li><li><a href="#nonterminals">Nonterminal symbols</a></li></ul></li><li><a href="#automaton">Automaton</a></li></ul><h2><a name="reductions"/> Reductions</h2><h3><a name="nonterminals_useless_in_grammar"/> Nonterminals useless in grammar</h3>
<h3><a name="terminals_unused_in_grammar"/> Terminals unused in grammar</h3>
<h3><a name="rules_useless_in_grammar"/> Rules useless in grammar</h3>
<h2><a name="conflicts"/> Conflicts</h2>
<h2><a name="grammar"/> Grammar</h2>
<p class="pre">
<a name="rule_0"/> 0 <span class="i">$accept</span><span class="i">program</span> <b>$end</b>
<a name="rule_1"/> 1 <span class="i">program</span> → ε
</p>
<h3><a name="terminals"/> Terminals, with rules where they appear</h3>
<p class="pre"><b>$end</b> (0)
<b>error</b> (256)
</p>
<h3><a name="nonterminals"/> Nonterminals, with rules where they appear</h3>
<p class="pre"><b>$accept</b> (3)
on left: <a href="#rule_0">0</a>
<b>program</b> (4)
on left: <a href="#rule_1">1</a>
on right: <a href="#rule_0">0</a>
</p><h2><a name="automaton"/> Automaton</h2>
<h3><a name="state_0"/>state 0</h3>
<p class="pre"> <a href="#rule_0"> 0</a> <span class="i">$accept</span><span class="point">.</span> <span class="i">program</span> <b>$end</b>
<a href="#rule_1"> 1</a> <span class="i">program</span><span class="point">.</span>
$default <a href="#rule_1">reduce using rule 1</a> (program)
program <a href="#state_1">go to state 1</a>
</p>
<h3><a name="state_1"/>state 1</h3>
<p class="pre"> <a href="#rule_0"> 0</a> <span class="i">$accept</span><span class="i">program</span> <span class="point">.</span> <b>$end</b>
$end <a href="#state_2">shift, and go to state 2</a>
</p>
<h3><a name="state_2"/>state 2</h3>
<p class="pre"> <a href="#rule_0"> 0</a> <span class="i">$accept</span><span class="i">program</span> <b>$end</b> <span class="point">.</span>
$default accept
</p>
<div id="footer"><hr/>This document was generated using
<a href="http://www.gnu.org/software/bison/" title="GNU Bison">
GNU Bison 2.4.1</a>
XML Automaton Report.<br/>
Verbatim copying and distribution of this entire page is
permitted in any medium, provided this notice is preserved.</div></body>
</html>
<?xml version="1.0"?>
<bison-xml-report version="2.4.1">
<filename>yacc.txt</filename>
<grammar>
<rules>
<rule number="0" usefulness="useful">
<lhs>$accept</lhs>
<rhs>
<symbol>program</symbol>
<symbol>$end</symbol>
</rhs>
</rule>
<rule number="1" usefulness="useful">
<lhs>program</lhs>
<rhs>
<empty/>
</rhs>
</rule>
</rules>
<terminals>
<terminal symbol-number="0" token-number="0" name="$end" usefulness="useful"/>
<terminal symbol-number="1" token-number="256" name="error" usefulness="useful"/>
</terminals>
<nonterminals>
<nonterminal symbol-number="3" name="$accept" usefulness="useful"/>
<nonterminal symbol-number="4" name="program" usefulness="useful"/>
</nonterminals>
</grammar>
<automaton>
<state number="0">
<itemset>
<item rule-number="0" point="0"/>
<item rule-number="1" point="0"/>
</itemset>
<actions>
<transitions>
<transition type="goto" symbol="program" state="1"/>
</transitions>
<errors/>
<reductions>
<reduction symbol="$default" rule="1" enabled="true"/>
</reductions>
</actions>
<solved-conflicts/>
</state>
<state number="1">
<itemset>
<item rule-number="0" point="1"/>
</itemset>
<actions>
<transitions>
<transition type="shift" symbol="$end" state="2"/>
</transitions>
<errors/>
<reductions/>
</actions>
<solved-conflicts/>
</state>
<state number="2">
<itemset>
<item rule-number="0" point="2"/>
</itemset>
<actions>
<transitions/>
<errors/>
<reductions>
<reduction symbol="$default" rule="accept" enabled="true"/>
</reductions>
</actions>
<solved-conflicts/>
</state>
</automaton>
</bison-xml-report>
%{
#include "main.h"
int yyerror(const char *s);
extern int yylex(void);
%}
%%
program:
;
%%
int main(int argc, char* argv[])
{
// 使用第一个参数输入待处理文件的名称,若没有没有输入此参数就报告错误
if(argc < 2)
{
printf("Usage: scan.exe filename.\n");
return 1;
}
// 打开待处理的文件
FILE* file = fopen(argv[1], "rt");
if(NULL == file)
{
printf("Can not open file \"%s\".\n", argv[1]);
return 1;
}
//
// TODO:
//
yyparse(); //使yacc开始读取输入和解析,它会调用lex的yylex()读取记号
fclose(file);
return 0;
}
/* 打印错误信息 */
int yyerror(const char* s)
{
fprintf(stdout, "%s\n", s);
return 0;
}
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论