2014-12-28 1 views
1

Я пишу простое приложение на C, которое я хотел бы опубликовать под лицензией BSD. Одна часть приложения отвечает за распечатку информации о программе своим пользователям. Однако у меня проблема с печатью текста лицензии. Вот пример:предупреждение: неизвестная escape-последовательность: ' 040' [включена по умолчанию]

#include <stdio.h> 
#include <stdlib.h> 

void show_license(void) 
{ 
    const char *license = "\n\ 
Copyright (c) 2012 \n\ 
All rights reserved.\n\ 
\"Redistribution and use in source and binary forms, with or without\n\ 
modification, are permitted provided that the following conditions are\n\ 
met:\n\ 
\n\ 
    * Redistributions of source code must retain the above copyright\n\ 
    notice, this list of conditions and the following disclaimer.\n\ 
    * Redistributions in binary form must reproduce the above copyright\n\ 
    notice, this list of conditions and the following disclaimer in\n\ 
    the documentation and/or other materials provided with the\n\ 
    distribution.\n\ 
    * Neither the name of XXX and its Subsidiary(-ies) nor the names\n\ 
    of its contributors may be used to endorse or promote products derived\n\ 
    from this software without specific prior written permission.\n\ 
\n\ 
\n\ 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\ 
\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n\ 
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n\ 
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n\ 
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n\ 
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n\ 
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n\ 
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n\ 
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\ 
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\ 
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\"\n\ 
\n\ 
\n\ \n"; 

    fputs("\n", stderr); 
    fputs(license, stderr); 
    fputs("\n", stderr); 
} 


int main() 
{ 
    show_license(); 
    return 0; 
} 

Я компилирую мое приложение с помощью gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.11 на Kubuntu 13.10. Я получил это предупреждение:

warning: unknown escape sequence: '\040' [enabled by default] 
    const char *license = "\n\ 
         ^

Как я могу избавиться от него? Я обещал себе написать код без каких-либо предупреждений и ошибок. Это обычное приложение C.

EDIT:

Спасибо всем, вот работает должным образом, предупреждение свободного код:

#include <stdio.h> 
#include <stdlib.h> 

void show_license(void) 
{ 
    const char *license = "\n \ 
Copyright (c) 2012 \n\ 
All rights reserved.\n\ 
\"Redistribution and use in source and binary forms, with or without\n\ 
modification, are permitted provided that the following conditions are\n\ 
met:\n\ 
\n\ 
    * Redistributions of source code must retain the above copyright\n\ 
    notice, this list of conditions and the following disclaimer.\n\ 
    * Redistributions in binary form must reproduce the above copyright\n\ 
    notice, this list of conditions and the following disclaimer in\n\ 
    the documentation and/or other materials provided with the\n\ 
    distribution.\n\ 
    * Neither the name of XXX and its Subsidiary(-ies) nor the names\n\ 
    of its contributors may be used to endorse or promote products derived\n\ 
    from this software without specific prior written permission.\n\ 
\n\n\ 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\ 
\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n\ 
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n\ 
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n\ 
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n\ 
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n\ 
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n\ 
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n\ 
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\ 
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\ 
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\"\n\ 
\n\n\n"; 

    fputs("\n", stderr); 
    fputs(license, stderr); 
    fputs("\n", stderr); 
} 


int main() 
{ 
    show_license(); 
    return 0; 
} 
+0

У вас есть googled «escape-последовательность 040»? –

+0

@WeatherVane: Да, я сделал - но добавление другого символа '\\' просто приводит к тому, что текст лицензии не обрабатывается как целый текст для печати. ​​ – yak

+0

У вас есть «\\ [пробел]» в конце одного или больше строк? Попробуйте этот ответ http://bytes.com/topic/c/answers/712378-why-backslash-space-combo-escape-sequence-040-a Если это так, замените «\» на «\», который сообщает компилятору: продолжите буквенный текст на следующей строке. –

ответ

4

В своем коде вы имеете эту строку (последняя строка текста договора), который является тем, что вызывает ошибку:

"\ n \ \ n";

Обратное слэш-пространство не является допустимой последовательностью эвакуации. Сообщение «040» является пространственным символом в восьмеричном значении, обозначенным ведущим 0.

+0

Так оно и было, спасибо! – yak

1

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

Например

const char *license = "\n\ 
          ^^^ here is a blank 

или, возможно, в какой-то другой строке определения многострочного.

Было бы проще написать определение следующим образом

const char *license = "\n" 
          "Copyright (c) 2012 \n" 
//... 
Смежные вопросы