Cpp warning missing terminating character

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build fails with missing terminating » character #206

Build fails with missing terminating » character #206

Comments

I am trying to build souper on my Fedora 23 box. I followed the instructions and the build fails with:

Scanning dependencies of target souperInst [ 1%] Building CXX object CMakeFiles/souperInst.dir/lib/Inst/Inst.cpp.o [ 2%] Linking CXX static library libsouperInst.a [ 2%] Built target souperInst Scanning dependencies of target kleeExpr [ 4%] Building CXX object CMakeFiles/kleeExpr.dir/third_party/klee/lib/Expr/Constraints.cpp.o [ 5%] Building CXX object CMakeFiles/kleeExpr.dir/third_party/klee/lib/Expr/ExprBuilder.cpp.o [ 6%] Building CXX object CMakeFiles/kleeExpr.dir/third_party/klee/lib/Expr/Expr.cpp.o [ 8%] Building CXX object CMakeFiles/kleeExpr.dir/third_party/klee/lib/Expr/ExprEvaluator.cpp.o [ 9%] Building CXX object CMakeFiles/kleeExpr.dir/third_party/klee/lib/Expr/ExprPPrinter.cpp.o [ 11%] Building CXX object CMakeFiles/kleeExpr.dir/third_party/klee/lib/Expr/ExprSMTLIBPrinter.cpp.o [ 12%] Building CXX object CMakeFiles/kleeExpr.dir/third_party/klee/lib/Expr/ExprUtil.cpp.o [ 13%] Building CXX object CMakeFiles/kleeExpr.dir/third_party/klee/lib/Expr/ExprVisitor.cpp.o [ 15%] Building CXX object CMakeFiles/kleeExpr.dir/third_party/klee/lib/Expr/Lexer.cpp.o [ 16%] Building CXX object CMakeFiles/kleeExpr.dir/third_party/klee/lib/Expr/Parser.cpp.o [ 18%] Building CXX object CMakeFiles/kleeExpr.dir/third_party/klee/lib/Expr/Updates.cpp.o [ 19%] Linking CXX static library libkleeExpr.a [ 19%] Built target kleeExpr Scanning dependencies of target souperInfer [ 20%] Building CXX object CMakeFiles/souperInfer.dir/lib/Infer/InstSynthesis.cpp.o [ 22%] Linking CXX static library libsouperInfer.a [ 22%] Built target souperInfer Scanning dependencies of target souperExtractor [ 23%] Building CXX object CMakeFiles/souperExtractor.dir/lib/Extractor/Candidates.cpp.o [ 25%] Building CXX object CMakeFiles/souperExtractor.dir/lib/Extractor/KLEEBuilder.cpp.o [ 26%] Building CXX object CMakeFiles/souperExtractor.dir/lib/Extractor/Solver.cpp.o [ 27%] Linking CXX static library libsouperExtractor.a [ 27%] Built target souperExtractor Scanning dependencies of target souperKVStore [ 29%] Building CXX object CMakeFiles/souperKVStore.dir/lib/KVStore/KVStore.cpp.o [ 30%] Linking CXX static library libsouperKVStore.a [ 30%] Built target souperKVStore Scanning dependencies of target souperParser [ 31%] Building CXX object CMakeFiles/souperParser.dir/lib/Parser/Parser.cpp.o [ 33%] Linking CXX static library libsouperParser.a [ 33%] Built target souperParser Scanning dependencies of target souperSMTLIB2 [ 34%] Building CXX object CMakeFiles/souperSMTLIB2.dir/lib/SMTLIB2/Solver.cpp.o [ 36%] Linking CXX static library libsouperSMTLIB2.a [ 36%] Built target souperSMTLIB2 Scanning dependencies of target souperTool [ 37%] Building CXX object CMakeFiles/souperTool.dir/lib/Tool/CandidateMapUtils.cpp.o [ 38%] Linking CXX static library libsouperTool.a [ 38%] Built target souperTool Scanning dependencies of target souperClangTool [ 40%] Building CXX object CMakeFiles/souperClangTool.dir/lib/ClangTool/Actions.cpp.o [ 41%] Linking CXX static library libsouperClangTool.a [ 41%] Built target souperClangTool Scanning dependencies of target clang-souper [ 43%] Building CXX object CMakeFiles/clang-souper.dir/tools/clang-souper.cpp.o [ 44%] Linking CXX executable clang-souper [ 44%] Built target clang-souper Scanning dependencies of target extractor_tests [ 45%] Building CXX object CMakeFiles/extractor_tests.dir/unittests/Extractor/ExtractorTests.cpp.o /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:109:241: warning: missing terminating " character /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:109:3: error: missing terminating " character ASSERT_TRUE(extractFromIR(R"m( ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:110:13: error: stray ‘@’ in program define void @f(i32 %p, i32 %q) < ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:118:1: error: stray ‘\’ in program )m")); ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:129:241: warning: missing terminating " character /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:129:3: error: missing terminating " character ASSERT_TRUE(extractFromIR(R"m( ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:130:13: error: stray ‘@’ in program define void @f(i32 %p, i32 %q) < ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:135:1: error: stray ‘\’ in program )m")); ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:144:241: warning: missing terminating " character /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:144:3: error: missing terminating " character ASSERT_TRUE(extractFromIR(R"m( ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:145:13: error: stray ‘@’ in program define void @f(i32 %p, i32 %q) < ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:162:1: error: stray ‘\’ in program )m")); ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:170:241: warning: missing terminating " character /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:170:3: error: missing terminating " character ASSERT_TRUE(extractFromIR(R"m( ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:171:13: error: stray ‘@’ in program define void @f(i32 %p, i32 %q) < ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:184:1: error: stray ‘\’ in program )m")); ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:186:237: warning: missing terminating " character /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:186:3: error: missing terminating " character EXPECT_TRUE(hasCandidate(R"c(%0:i32 = var ; phi ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:190:1: error: stray ‘\’ in program )c")); ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:195:241: warning: missing terminating " character /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:195:3: error: missing terminating " character ASSERT_TRUE(extractFromIR(R"m( ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:196:13: error: stray ‘@’ in program define void @f(i1 %p, i1 %q, i1 %r, i1 %s) < ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:219:1: error: stray ‘\’ in program )m")); ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:221:237: warning: missing terminating " character /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:221:3: error: missing terminating " character EXPECT_TRUE(hasCandidate(R"c(%0:i1 = var ; p ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:231:1: error: stray ‘\’ in program )c")); ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:233:237: warning: missing terminating " character /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:233:3: error: missing terminating " character EXPECT_TRUE(hasCandidate(R"c(%0:i1 = var ; s ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:237:1: error: stray ‘\’ in program )c")); ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp: In member function ‘virtual void ExtractorTest_Simple_Test::TestBody()’: /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:110:1: error: ‘define’ was not declared in this scope define void @f(i32 %p, i32 %q) < ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:109:28: error: return-statement with a value, in function returning 'void' [-fpermissive] ASSERT_TRUE(extractFromIR(R"m( ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:109:29: error: expected ‘;’ before ‘)’ token ASSERT_TRUE(extractFromIR(R"m( ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:109:29: error: expected primary-expression before ‘)’ token /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp: In member function ‘virtual void ExtractorTest_Nsw_Test::TestBody()’: /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:130:1: error: ‘define’ was not declared in this scope define void @f(i32 %p, i32 %q) < ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:129:28: error: return-statement with a value, in function returning 'void' [-fpermissive] ASSERT_TRUE(extractFromIR(R"m( ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:129:29: error: expected ‘;’ before ‘)’ token ASSERT_TRUE(extractFromIR(R"m( ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:129:29: error: expected primary-expression before ‘)’ token /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp: In member function ‘virtual void ExtractorTest_PhiCond_Test::TestBody()’: /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:145:1: error: ‘define’ was not declared in this scope define void @f(i32 %p, i32 %q) < ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:144:28: error: return-statement with a value, in function returning 'void' [-fpermissive] ASSERT_TRUE(extractFromIR(R"m( ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:144:29: error: expected ‘;’ before ‘)’ token ASSERT_TRUE(extractFromIR(R"m( ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:144:29: error: expected primary-expression before ‘)’ token /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp: In member function ‘virtual void ExtractorTest_PhiLoop_Test::TestBody()’: /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:171:1: error: ‘define’ was not declared in this scope define void @f(i32 %p, i32 %q) < ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:170:28: error: return-statement with a value, in function returning 'void' [-fpermissive] ASSERT_TRUE(extractFromIR(R"m( ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:170:29: error: expected ‘;’ before ‘)’ token ASSERT_TRUE(extractFromIR(R"m( ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:170:29: error: expected primary-expression before ‘)’ token /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:186:46: error: expected primary-expression before ‘(’ token EXPECT_TRUE(hasCandidate(R"c(%0:i32 = var ; phi ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:187:1: error: expected primary-expression before ‘%’ token %1:i32 = add 1:i32, %0 ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:187:21: error: expected primary-expression before ‘%’ token %1:i32 = add 1:i32, %0 ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:188:20: error: expected primary-expression before ‘%’ token %2:i1 = eq 42:i32, %1 ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp: In member function ‘virtual void ExtractorTest_PathCondition_Test::TestBody()’: /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:196:1: error: ‘define’ was not declared in this scope define void @f(i1 %p, i1 %q, i1 %r, i1 %s) < ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:195:28: error: return-statement with a value, in function returning 'void' [-fpermissive] ASSERT_TRUE(extractFromIR(R"m( ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:195:29: error: expected ‘;’ before ‘)’ token ASSERT_TRUE(extractFromIR(R"m( ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:195:29: error: expected primary-expression before ‘)’ token /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:221:46: error: expected primary-expression before ‘(’ token EXPECT_TRUE(hasCandidate(R"c(%0:i1 = var ; p ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:222:1: error: expected primary-expression before ‘%’ token %1:i1 = var ; q ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:222:15: error: ‘q’ was not declared in this scope %1:i1 = var ; q ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:225:15: error: ‘r’ was not declared in this scope %3:i1 = var ; r ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:234:1: error: ‘pc’ was not declared in this scope pc %0 1:i1 ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:233:46: error: expected primary-expression before ‘(’ token EXPECT_TRUE(hasCandidate(R"c(%0:i1 = var ; s ^ /home/julian.stecklina/src/souper/unittests/Extractor/ExtractorTests.cpp:235:18: error: expected primary-expression before ‘%’ token %1:i1 = eq 1:i1, %0 ^ CMakeFiles/extractor_tests.dir/build.make:62: recipe for target 'CMakeFiles/extractor_tests.dir/unittests/Extractor/ExtractorTests.cpp.o' failed make[2]: *** [CMakeFiles/extractor_tests.dir/unittests/Extractor/ExtractorTests.cpp.o] Error 1 CMakeFiles/Makefile2:154: recipe for target 'CMakeFiles/extractor_tests.dir/all' failed make[1]: *** [CMakeFiles/extractor_tests.dir/all] Error 2 Makefile:83: recipe for target 'all' failed make: *** [all] Error 2 

The text was updated successfully, but these errors were encountered:

Читайте также:  Как правильно делать формы html

Источник

Часто встречающиеся ошибки стадии компиляции

Очень часто начинающие программисты впадают в суеверный ужас, когда видят, что компилятор нашел в тексте программы ошибку, но не понимают, в чем она заключается.

А если помножить этот факт на незнание английского языка («чего там ему не нравится. ») и слабое владение синтаксисом C++ («хм, а может, тут нужна точка с запятой…»), то проблема принимает масштаб катастрофы.

Тот факт, что компилятор в силу своих ограниченных возможностей изо всех сил старается объяснить, что конкретно неверно, не спасает ситуацию. Как быть, если гуглить неохота, а спросить не у кого?

В этом посте на правах копипаста с последующим переводом, дополнениями и исправлениями приведу описание наиболее распространенных сообщений об ошибках и предупреждений компилятора. Неприятность кроется в том факте, что разные компиляторы ругаются на одинаковые ошибки по-разному, а некоторые даже не замечают то, что другие принимают за ошибку. Все зависит от совести разработчиков компилятора, даты его выпуска, и др.

В качестве компилятора возьмем g++, который, в частности, может использоваться в среде Code::Blocks. Версия gcc (куда входит g++) для ОС Windows зовется MinGW. По ходу я буду давать аналоги ошибок из лексикона русскоязычной Microsoft Visual C++.

undeclared identifier

doy.cpp: In function 'int main()':
doy.cpp:25: 'DayOfYear' undeclared (first use this function)
doy.cpp:25: (Each undeclared identifier is reported only once for each function it appears in.)
doy.cpp:25: parse error before ';' token

2) Смысл
Использован идентификатор DayOfYear , но компилятор не нашел его объявления. Он не знает, что такое DayOfYear .

  • Вы забыли включить какой-то заголовочный файл ( #include. )
  • Вы где-то ошиблись в написании идентификатора (при объявлении или использовании)
  • Вы вообще забыли, что эту переменную надо объявить

Попытавшись скомпилировать это в Microsoft Visual C++, вы увидите:

error C2065: DayOfYear: необъявленный идентификатор

cout undeclared

xyz.cpp: In function 'int main()':
xyz.cpp:6: 'cout' undeclared (first use this function)
xyz.cpp:6: (Each undeclared identifier is reported only once for each function it appears in.)

2) Смысл
Суперклассика. Без комментариев.

jump to case label

switch.cpp: In function 'int main()':
switch.cpp:14: jump to case label
switch.cpp:11: crosses initialization of 'int y'

3) Когда бывает
Вы попытались объявить и инициализировать переменную (объект, указатель и т.п.) в метке case оператора выбора switch. Правилами C++ это запрещено.

В Microsoft Visual C++ эта ошибка зовется

error C2360: пропуск инициализации 'y' из-за метки 'case'

Выход: заключите операторы этого case’а в фигурные скобки <>.

multi-line string / unterminated string

вызовет бурную реакцию компилятора:

string.cpp:7:12: warning: multi-line string literals are deprecated
string.cpp: In function 'int main()':
string.cpp:7: 'so' undeclared (first use this function)
string.cpp:7: (Each undeclared identifier is reported only once for each function it appears in.)
string.cpp:7: parse error before 'Mary'
string.cpp:8:28: warning: multi-line string literals are deprecated
string.cpp:8:28: missing terminating " character
string.cpp:7:12: possible start of unterminated string literal

2) Смысл
Компилятор думает, что мы хотим создать строковую константу с содержащимся в ней переносом строки, что-то типа

что не поддерживается языком. Также делается предположение о том, что мы, возможно, забыли поставить кавычки в конце первой строки. Собственно, так оно и есть.

3) Когда бывает
Когда не соблюдается правильное количество и положение кавычек в строковых литералах. Надо быть внимательнее.

Microsoft Visual C++ со свойственной ему детской непосредственностью, отметит, что нельзя делать переносы в строках и возмутится, где точка с запятой:

error C2001: newline в константе
error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "cout"

comparison between signed and unsigned integer expressions

xyz.cpp: In function 'int main()':
xyz.cpp:54: warning: comparison between signed and unsigned integer expressions

2) Смысл
Это — предупреждение компилятора, которое говорит о том, что мы пытаемся сравнить (==, и т.д.) целочисленное выражение (может принимать положительные, отрицательные значения и 0) и беззнаковое целочисленное выражение (может быть только положительным, либо 0).

3) Когда бывает
Собственно, тогда и бывает. Напомню, что тип int по умолчанию знаковый, а некоторые функции (например, vector::size() ) возвращают unsigned int .
К примеру, следующий на первый взгляд безобидный код вызовет описываемое предупреждение:

Следует помнить, что в памяти знаковые и беззнаковые типы имеют разные внутренние представления, поэтому надо быть чертовски осторожными с указателями.

В Microsoft Visual C++ предупреждение выглядит так:

suggest parentheses around assignment used as truth value

xyz.cpp: In function `int main()':
xyz.cpp:54: warning: suggest parentheses around assignment used as truth value

2) Смысл
Тоже классика. Компилятор предполагает (и в 99% случаев прав), что вы по ошибке включили в скобки в качестве условия для if/while/for вместо условного выражения выражение присваивания.

P.S. Следует отметить, что кроме ошибок стадии компиляции встречаются (гораздо реже) ошибки препроцессора (например, если не найден заголовочный файл ), ошибки стадии компоновки (можно избежать, если научиться пользоваться средой программирования) и — самый гнусный тип ошибок! — ошибки стадии выполнения. Т.н. runtime error. С ними может справиться только голова программиста, вооруженная отладчиком.

Поделиться:

Источник

Оцените статью