Error stray 201 in program

Модератор: Модераторы разделов

Модератор: Модераторы разделов

Аватара пользователя

chups

Сообщения: 79
ОС: Debian Lenny GNU/Linux

ошибки коплиляции программ Qt4, stray

всем привет. уважаемые форумчане подскажите в чем проблемма: пишу не очень сложную программку, до поры до времени она собиралась, а потом начались появляться непонятные мне ошибки компиляции:

Код:

chups@linux-chups:~/from PCLinuxOS/Data Base/current work/temp_tableview> make
make: Warning: File `ui_dbFile.h' has modification time 2,2e+04 s in the future
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/default -I. -I/usr/include/QtCore -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtGui -I/usr/include/QtSql -I/usr/include/QtSql -I/usr/include -I. -I. -I. -o table.o table.cpp
table.cpp:10: error: stray ‘321’ in program
table.cpp:10: error: stray ‘201’ in program
table.cpp:13: error: stray ‘321’ in program
table.cpp:13: error: stray ‘201’ in program
table.cpp:15: error: stray ‘321’ in program
table.cpp:15: error: stray ‘201’ in program
make: *** [table.o] Ошибка 1

а вот здесь у меня вообще произошла ломка понятий :wacko: :crazy: :

Код:

chups@linux-chups:~/from PCLinuxOS/Data Base/current work/temp_tableview> make
make: Warning: File `ui_dbFile.h' has modification time 2,2e+04 s in the future
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/default -I. -I/usr/include/QtCore -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtGui -I/usr/include/QtSql -I/usr/include/QtSql -I/usr/include -I. -I. -I. -o table.o table.cpp
g++ -o temp_tableview main.o table.o workWithDb.o moc_workWithDb.o -L/usr/lib -lQtSql -L/usr/lib -lQtGui -L/usr/X11R6/lib -lpng -lSM -lICE -lXi -lXrender -lXrandr -lXfixes -lXcursor -lXinerama -lfreetype -lfontconfig -lXext -lX11 -lQtCore -lz -lm -lrt -ldl -lpthread
make: предупреждение: Неправильный ход часов. Сборка может быть неполной.

В чем проблема? из-за чего возникают ошибки. код вроде правильный…
Qt4 изаю последний, пробовал собирать в 2 системах: opensuse и pclinuxos, результат одинаков

Сам исходный код прилагаю

______18.png

______17.png

Аватара пользователя

whirlwind

Сообщения: 67

Re: ошибки коплиляции программ Qt4, stray

Сообщение

whirlwind » 28.05.2008 17:52

chups писал(а): ↑

28.05.2008 17:17

make: предупреждение: Неправильный ход часов. Сборка может быть неполной.

это вроде бы как раз ясно: у файла main.cpp дата последнего изменения стоит 29 число, хотя сегодня еще 28е ;) видимо, на одной из двух систем у вас что-то со временем

а вообще, есть подозрение, что там буквы «со» русские используются..
я две строки полностью перенабрал, а в этой
connect(connectButton, SIGNAL(clicked()), this, SLOT(connectionToDB()));
заменил только со, после чего оно соизволило нормально собраться

Добро всегда побеждает зло. Мы победили, значит мы — добро.

Аватара пользователя

GRS

Сообщения: 236
Статус: C++ Pro
ОС: Suse10.2/XP

Re: ошибки коплиляции программ Qt4, stray

Сообщение

GRS » 28.05.2008 18:40

chups
Поддерживаю или лучше сказать присоединяюсь к тому что ответил whirlwind
Ошибки первого рода часто бывают, при копировании текста из буфера. Самое ужасное, когда там непечатные символы — тогда только редактор помогает, при включении отображения непечатных символов.

Аватара пользователя

Assuri

Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Контактная информация:

Re: ошибки коплиляции программ Qt4, stray

Сообщение

Assuri » 28.05.2008 19:58

table.cpp:10: error: stray ‘321’ in program
table.cpp:10: error: stray ‘201’ in program
table.cpp:13: error: stray ‘321’ in program
table.cpp:13: error: stray ‘201’ in program
table.cpp:15: error: stray ‘321’ in program
table.cpp:15: error: stray ‘201’ in progra

Везде, где есть «слово» connectButton вылазиет эта ошибка. Скорее всего Вы копипастили. Наверное буква «c» в слове connect у Вас русская, а не английская. Хотя это только предположение. Попробуйте эти строки переписать снова вручную.

Аватара пользователя

chups

Сообщения: 79
ОС: Debian Lenny GNU/Linux

Re: ошибки коплиляции программ Qt4, stray

Сообщение

chups » 28.05.2008 20:52

всем спасибо:) все исправилось и мои понятия стали на места
с временем вы точно угдали: я работал в одной системе, потом вырубил комп и биосе время поменял, ну и сразу загрузился в другую систему и оттуда продолжил работать
на счет русских букв — может быть, я как раз когда «создавал» кнопку болтал по аське, может быть и вбил русский символ
Всем спасибо, тему можно закрывать:)

P.S. токо сейчас заметил что у мну на часах стоит 29-е число, время выставил нормально, а вот день что-то провтикал :laugh:

Пытаюсь передать функции «строковый массив», но он выводит ошибку вместе с правильным выводом.

C++:

#include <iostream>
#include <cstring>
using namespace std;

void echo(char* string){
	cout << string << endl;
}

int main(){
	echo("abc");
	return 0;
}

Терминал:

linux>~>cpp> ./build.sh 
main.cpp: In function ‘int main()’:
main.cpp:10:7: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
   10 |  echo("abc");
      |       ^~~~~
abc


  • Вопрос задан

    более года назад

  • 528 просмотров

Нужно const char*
А так да, имя совпало со стандартным классом — нехорошо

Пригласить эксперта

string — это название класса STL.

void echo(char* str){
  cout << str << endl;
}

Можно через указатель

void printer(char *str)
{
    cout << str << endl;
  
}

Можно через массив char

void printer(char str[])
{
    cout << str << endl;
  
}


  • Показать ещё
    Загружается…

12 февр. 2023, в 20:53

18000 руб./за проект

12 февр. 2023, в 20:15

10000 руб./за проект

12 февр. 2023, в 20:14

100000 руб./за проект

Минуточку внимания

nonedark2008, да это все есть — конструкторы, перегруженные опрераторы и все такое. я их сюда не привел. проблема вот такая.
есть класс (уж извините, ребята, у меня все идентификаторы на русском — Visual Studio позволяет)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
template <typename X>
class массив {
protected:
    int числоСтрок; // m
    int числоСтолбцов; // n; для ленточныях матриц - полуширина матриц (с учётом главной диагонали)
 
    mutable X **указательСтрока; // указатель на массив (на строки)
    X *указательЭлемент; // указатель на элементы строк
    X *конецСтроки; // указатель на конец строки
 
    X **началоМассива; // указатель на начало массива
 
    математика типМатрицы;
 
    bool признакВременности = false; // признак временной матрицы - результата сложения, умножения и т.п. - для передачи для присваивания
 
    inline static int счётчикНомеров = 1; // рабочая переменная
    int номерОбъекта; // рабочая переменная
public:
    массив() {
        // конструктор - "пустой" массив
 
        this->числоСтрок = 0;
        this->числоСтолбцов = 0;
        this->типМатрицы = математика::пустаяМатрица;
 
        указательСтрока = nullptr;
 
        началоМассива = указательСтрока;
 
        номерОбъекта = счётчикНомеров++;
        cout << "КОНСТРУКТОР ПУСТОЙ " << номерОбъекта << 'n';
    }
    массив(int числоСтрок, int числоСтолбцов, математика типМатрицы) {
        // конструктор
 
        this->числоСтрок = числоСтрок;
        this->числоСтолбцов = числоСтолбцов;
        this->типМатрицы = типМатрицы;
 
        указательСтрока = создатьМассив(this->числоСтрок, this->числоСтолбцов, this->типМатрицы);
 
        началоМассива = указательСтрока;
 
        номерОбъекта = счётчикНомеров++;
        cout << "КОНСТРУКТОР " << номерОбъекта << 'n';
    }
    массив(массив <X> &объект) {
        // конструктор копии
        номерОбъекта = счётчикНомеров++;
        cout << "КОНСТРУКТОР КОПИИ " << номерОбъекта << 'n';
 
        this->числоСтрок = объект.числоСтрок;
        this->числоСтолбцов = объект.числоСтолбцов;
        this->типМатрицы = объект.типМатрицы;
 
        if (объект.вернутьПризнакВременности()) забратьМассив(объект);
        else {
            указательСтрока = создатьМассив(this->числоСтрок, this->числоСтолбцов, this->типМатрицы);
            копироватьМассив(объект);
        }
 
        началоМассива = указательСтрока;
 
        проверкаНаВременность(объект);
    }
    массив(массив <X> *объект) {
        // конструктор копии
        номерОбъекта = счётчикНомеров++;
        cout << "КОНСТРУКТОР КОПИИ " << номерОбъекта << 'n';
 
        this->числоСтрок = объект->числоСтрок;
        this->числоСтолбцов = объект->числоСтолбцов;
        this->типМатрицы = объект->типМатрицы;
 
        if (объект->вернутьПризнакВременности()) забратьМассив(объект);
        else {
            указательСтрока = создатьМассив(this->числоСтрок, this->числоСтолбцов, this->типМатрицы);
            копироватьМассив(*объект);
        }
 
        началоМассива = указательСтрока;
 
        проверкаНаВременность(объект);
    }
    ~массив() {
        указательСтрока = началоМассива;
 
        if (типМатрицы == математика::нулеваяМатрица || типМатрицы == математика::единичнаяМатрица) числоСтрок = 0;
 
        for (int i = 0; i < this->числоСтрок; i++, указательСтрока++) delete[] * указательСтрока;
        указательСтрока = началоМассива;
        delete[] указательСтрока;
 
        cout << "ДЕструктОР " << номерОбъекта << 'n';
    }
}

внутри создается динамический массив. Допустим есть функция транспонирования матрицы

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
массив <X> &T() {
        // транспонирование матрицы
 
        массив <X> *временныйМассив;
 
X **строкаВременный;
        X *элементВременный, *конецСтроки;
 
        this->указательСтрока = this->началоМассива;
 
 
        for (int строка = 0; строка < временныйМассив->числоСтрок; строка++, строкаВременный++) {
            int столбец = 0;
                for (элементВременный = *строкаВременный, конецСтроки = элементВременный + временныйМассив->вернутьЧислоСтолбцов(строка); 
                    элементВременный < конецСтроки; столбец++, элементВременный++) *элементВременный = this->указательСтрока[столбец][строка];
        }
        строкаВременный -= временныйМассив->числоСтрок;
 
        временныйМассив->установитьПризнакВременности();
 
        return *временныйМассив;
    }

Тут, чтобы не загромождать я привел только часть её. Так вот, в чём проблема: если тип шаблона класса любой встроенный тип (например double) то функция T() для объекта работает отлично (например объект.T()). Но если я делаю тип массив<массив<double>> (т.е. элементами массива объекта будут такие же объекты-матрицы с элементами double), то вот такую операцию для элемента массива сделать не получается: указательСтрока[i][j].T();

C++
1
2
3
4
5
массив <double> object1;
object1.T(); // тут ОК
 
массив <массив<double>> object2;
object2.началоМассива[i][j].T(); // тут ошибка

Т.е. компилятор говорит, что если типом класса будет встроенный тип (например double), то для такого элемента массива функция T() не определена. По-этому приходилось перегружать унарный оператор. Но ведь для всех функций операторов не напасёшся.
И вот прочитал в книжке про принятие решения во время компиляции с помощью constexpr-if. Для сложения написал вот, что

C++
1
2
3
4
5
6
7
8
9
10
if constexpr (признакБлочностиМатрицы() == математика::блочнаяМатрица) {
                        for (; this->указательЭлемент < this->конецСтроки; ++столбец, ++this->указательЭлемент)
                                *this->указательЭлемент = -1 * массивОбъекта[столбец][строка - столбец].T();
                    }
                    else {
                        // элементная (числовая) матрица
 
                        for (; this->указательЭлемент < this->конецСтроки; ++столбец, ++this->указательЭлемент)
                                *this->указательЭлемент = -1 * массивОбъекта[столбец][строка - столбец];
                    }

вроде бы скомпилировалось. но еще не проверял

Добавлено через 6 минут
Если есть какой-то общеизвестный способ обойти эту проблему, умоляю, расскажите

есть — сделай вдоль

anonymous

(14.04.15 16:26:02 MSK)

  • Ссылка

Нет, переходи на swift, если нужно такое

anonymous

(14.04.15 16:26:04 MSK)

  • Ссылка

Сисярпик и 1С ждет тебя

anonymous

(14.04.15 16:27:00 MSK)

  • Ссылка

Используй нормальный компилятор:

$ cat test.cpp
#include <iostream>

int main(int argc, char** argv)
{
        int Ё = 10;
        std::cout << Ё << std::endl;
        return 0;
}
$ g++ test.cpp -o test
test.cpp:5:2: error: stray '320' in program
  int Ё = 10;
  ^
test.cpp:5:2: error: stray '201' in program
test.cpp:6:2: error: stray '320' in program
  std::cout << Ё << std::endl;
  ^
test.cpp:6:2: error: stray '201' in program
test.cpp: In function 'int main(int, char**)':
test.cpp:5:9: error: expected unqualified-id before '=' token
  int Ё = 10;
         ^
test.cpp:6:18: error: expected primary-expression before '<<' token
  std::cout << Ё << std::endl;
                  ^
$ clang++ test.cpp -o test
$ ./test
10

anonymous

(14.04.15 16:33:47 MSK)

  • Ссылка

Три десятка макросов решат твою проблему жи

melkor217 ★★★★★

(14.04.15 17:01:19 MSK)

  • Ссылка

clang спасёт тебя

MacBook-Andrew% cat test.c
#include <stdio.h>
int main(void)
{
int пони=1;
printf("%dn", пони);
return 0;
}
MacBook-Andrew% clang test.c ; ./a.out
1

fornlr ★★★★★

(14.04.15 17:39:40 MSK)

  • Показать ответы
  • Ссылка

Только недавно точь-в-точь об этом было! Можно пропатчить gcc или использовать шланг. Но русские переменные и имена функций не нужны. Это — извращение.

Русским буквам вообще место только в комментариях для gettext’а, чтобы автоматизировать процесс формирования po-файлов.

Eddy_Em

☆☆☆☆☆

(14.04.15 17:42:25 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от fornlr 14.04.15 17:39:40 MSK

Ответ на:

комментарий
от fornlr 14.04.15 17:39:40 MSK

??? неужели в clang это работает? А если либу сделать, то другие смогут слинковаться?

  • Ссылка

Ответ на:

комментарий
от anonymous 14.04.15 18:00:13 MSK

Ответ на:

комментарий
от anonymous 14.04.15 18:00:13 MSK

$ cat test.cpp
#include <iostream>

int main(int argc, char** argv)
{
        int ಠ_ಠ = 10;
        std::cout << ಠ_ಠ << std::endl;
        return 0;
}

$ clang++ test.cpp -o test
$ ./test
10

anonymous

(14.04.15 18:13:41 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от anonymous 14.04.15 18:13:41 MSK

Прикольно. А что-нить спарава-налево? =))

anonymous

(14.04.15 18:18:00 MSK)

  • Ссылка

Ответ на:

комментарий
от EXL 14.04.15 18:29:06 MSK

Ну с #define неинтересно и читерство, ручной препроцессор же

так и в gcc будет работать

fornlr ★★★★★

(14.04.15 18:30:13 MSK)



Последнее исправление: fornlr 14.04.15 18:33:29 MSK
(всего

исправлений: 3)

  • Ссылка

Ответ на:

комментарий
от fornlr 14.04.15 17:39:40 MSK

#include <stdio.h>

#define пусто   void
#define знак    char
#define число   int
#define вернуть return
#define начало  main

пусто
печать(знак *переменная)
{
        puts(переменная);
}

число
начало()
{
        знак *строка = "что-то там";
        печать(строка);
        вернуть 0;
}
$ make lor13 && ./lor13 
cc -O2 -pipe    lor13.c  -o lor13
что-то там
$ clang -v
FreeBSD clang version 3.4.1 (tags/RELEASE_34/dot1-final 208032) 20140512
# ...

Ну и: http://play.golang.org/p/zZkvC-vhCW ← тоже работает (и без извращений) ;)

beastie ★★★★★

(14.04.15 18:32:10 MSK)

  • Показать ответ
  • Ссылка

MacBook-Andrew% clang test.c
test.c:5:16: error: use of undeclared identifier 'лощадь'; did you mean
      'лошадь'?
printf("%dn", лощадь);
               ^~~~~~
               лошадь
test.c:3:25: note: 'лошадь' declared here
void функция(int лошадь)
                 ^
1 error generated.

Вообще круто, исправил по подсказке компилятора — заработало.

#include <stdio.h>

void функция(int лошадь)
{
printf("%dn", лошадь);
}

int main(void)
{
int пони=1;
функция(пони);
return 0;
}

fornlr ★★★★★

(14.04.15 18:38:58 MSK)



Последнее исправление: fornlr 14.04.15 18:45:42 MSK
(всего

исправлений: 2)

  • Показать ответы
  • Ссылка

Ответ на:

комментарий
от beastie 14.04.15 18:32:10 MSK

Ответ на:

комментарий
от beastie 14.04.15 18:41:47 MSK

Ответ на:

комментарий
от I-Love-Microsoft 14.04.15 18:55:43 MSK

Так и выгядит:

$ nm lor13
# ... skipped
0000000000400730 T печать

А вот, как линковаться — не знаю.

beastie ★★★★★

(14.04.15 18:57:45 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от beastie 14.04.15 18:57:45 MSK

Ого, а в какой кодировке имена функций в ELF-е? Меня не на шутку это всё как-то резко заинтересовало. Блин, буду реально же проги писать с именами переменных на кириллице!

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от I-Love-Microsoft 14.04.15 19:03:01 MSK

00001cb0  40 40 46 42 53 44 5f 31  2e 30 00 d0 bf d0 b5 d1  |@@FBSD_1.0......|
00001cc0  87 d0 b0 d1 82 d1 8c 00  5f 5f 64 73 6f 5f 68 61  |........__dso_ha|

Похоже, что UTF-8.

beastie ★★★★★

(14.04.15 19:08:56 MSK)



Последнее исправление: beastie 14.04.15 19:09:15 MSK
(всего

исправлений: 1)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от EXL 14.04.15 18:29:06 MSK

чтобы можно было использовать имена переменных и функций на русском языке

Сделать можно, но не нужно, ибо противоречит стандарту.

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от beastie 14.04.15 19:08:56 MSK

Похоже, что UTF-8

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

no-such-file ★★★★★

(14.04.15 19:46:33 MSK)



Последнее исправление: no-such-file 14.04.15 19:47:03 MSK
(всего

исправлений: 1)

  • Показать ответы
  • Ссылка

Ответ на:

комментарий
от fornlr 14.04.15 18:38:58 MSK

Вообще круто

Присобачь еще инклуд

#define небытие void
#define целое int
#define вернуть return
#define печатать printf
#define программа main

и перепиши всё по-русски.

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от no-such-file 14.04.15 19:46:33 MSK

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

Требуется Eddy с KOIR-8 и шлангом на проверку сего утверждения. Получается, с помощью clang’а можно сделать бНОПНЯ?

EXL ★★★★★

(14.04.15 19:57:44 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от no-such-file 14.04.15 19:54:34 MSK

Ответ на:

комментарий
от fornlr 14.04.15 20:01:04 MSK

ибо уже не натурально и синтетично

Дык я ж говорю, сделай это отдельный инклуд, а в программе используй #include<russian.h> Вполне ничотак.

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от no-such-file 14.04.15 20:03:56 MSK

Да, да, а ещё можно до одной строчки сократить файл — это уже непрактичное и некрасивое баловство с препроцессором

#include<russian.h>
скучный_код

fornlr ★★★★★

(14.04.15 20:06:28 MSK)



Последнее исправление: fornlr 14.04.15 20:07:48 MSK
(всего

исправлений: 1)

  • Ссылка

Ответ на:

комментарий
от Hertz 14.04.15 19:37:50 MSK

Ещё можешь опустить ‘define SEMKI’, т.к. переменные в utf тоже прекрасно работают. ;)

beastie ★★★★★

(14.04.15 20:15:34 MSK)

  • Ссылка

Ответ на:

комментарий
от EXL 14.04.15 19:57:44 MSK

У меня нет шланга. И не будет.

Eddy_Em

☆☆☆☆☆

(14.04.15 20:42:16 MSK)

  • Ссылка

Unicode, you are doing it wrong.


#include <u.h>
#include <libc.h>
 
typedef int ☺☹☻;
typedef void ☹☺☻;
 
enum
{
	☹☻☺ = sizeof(☺☹☻),
	☻☺☹ = sizeof(☹☺☻)
};
 
☹☺☻
main(☹☺☻)
{
	☺☹☻ ☺☻☹;
 
	for (☺☻☹ = ☻☺☹; ☺☻☹ < ☹☻☺; ☺☻☹++)
		print("☺☻☹ = %dn", ☺☻☹);
	exits(☻☺☹);
}

(c) Ken Thompson

loz ★★★★★

(14.04.15 21:38:33 MSK)



Последнее исправление: loz 14.04.15 21:39:09 MSK
(всего

исправлений: 1)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от no-such-file 14.04.15 19:46:33 MSK

UTF-8 значит UTF-8, всё, я решил — так и буду софт писать, где там шланг для бубунты качать? =)))

  • Ссылка

Ответ на:

комментарий
от fornlr 14.04.15 18:38:58 MSK

Ты заметил, что ты единственный, кто включил приглашение командной строки в копипасту?

ya-betmen ★★★★★

(15.04.15 02:56:49 MSK)

  • Ссылка

Ответ на:

комментарий
от beastie 14.04.15 18:41:47 MSK

Юникода НЕ-БУ-ДЕТ!

$ gcc -c test.c -fextended-identifiers -std=c99
$ nm test.o
0000000000000000 T ТВЕРДО_И_ЧЕТКО

anonymous

(15.04.15 03:35:23 MSK)

  • Ссылка

Ответ на:

комментарий
от no-such-file 14.04.15 19:44:49 MSK

Ответ на:

комментарий
от beastie 14.04.15 18:41:47 MSK

gcc может это! The C Preprocessor: 1.1 Character sets

In identifiers, characters outside the ASCII range can only be specified with the ‘u’ and ‘U’ escapes, not used directly. If strict ISO C90 conformance is specified with an option such as -std=c90, or -fno-extended-identifiers is used, then those escapes are not permitted in identifiers.

$ cat lor13.c |./esc.tcl |gcc -x c - -std=c99 -fextended-identifiers
$ ./a.out
что-то там
$ nm ./a.out
....
0804840c T печать
$ cat esc.tcl
#!/usr/bin/tclsh
while {![eof stdin]} {
    set c [read stdin 1]
    if {![string is ascii $c]} {
        scan $c "%c" c
        set c [format "\u%04X" $c]
    }
    puts -nonewline $c
}

Либо текстовый редактор научить это u0434u0435u043Bu0430u0442u044. Такое vim сумеет?

I-Love-Microsoft, возвращайся назад на gcc!

fopen ★★

(15.04.15 04:18:40 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от fopen 15.04.15 04:18:40 MSK

ISO/IEC 9899:1999 (E)
©ISO/IEC
Annex D
(normative)
Universal character names for identifiers
1 This clause lists the hexadecimal code values that are valid in universal character names
 in identifiers.
2 This table is reproduced unchanged from ISO/IEC TR 10176:1998, produced by ISO/IEC
 JTC 1/SC 22/WG 20, except for the omission of ranges that are part of the basic character
sets.
....
Cyrillic: 0401−040C, 040E−044F, 0451−045C, 045E−0481, 0490−04C4,
                   04C7−04C8, 04CB−04CC, 04D0−04EB, 04EE−04F5, 04F8−04F9
....

Это можно! И по стандарту!

fopen ★★

(15.04.15 04:38:29 MSK)

  • Ссылка

тебя не смущает что при использовании кириллицы ты будешь вынужден постоянно переключать раскладку? Ты конечно можешь заменить макросами int на ЦЕЛОЕ, но команды препроцессору не изменишь. Это же дико неудобно.

Aswed ★★★★★

(15.04.15 11:09:39 MSK)

  • Показать ответы
  • Ссылка

Ответ на:

комментарий
от Eddy_Em 14.04.15 17:42:25 MSK

Что ж ты здесь-то пишешь ненавмстными тебе русскими буквами? Peshi kak balyi tschelovek, amerekanskimi.

anonymous

(15.04.15 11:51:47 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от anonymous 15.04.15 11:51:47 MSK

Ты тупой? Я про код говорю, а не про тексты.

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

Вот, скажем, на кой мне китайские комментарии? Аналогично китайцу русские комментарии нафиг не нужны.

Eddy_Em

☆☆☆☆☆

(15.04.15 11:57:14 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от anonymous 15.04.15 03:36:52 MSK

ANNEX D

Куда катится мир…

  • Ссылка

Ответ на:

комментарий
от Aswed 15.04.15 11:09:39 MSK

а чтобы можно было использовать имена переменных и функций на русском языке.

но зачем?

Dudraug ★★★★★

(15.04.15 13:14:29 MSK)

  • Ссылка

Ответ на:

комментарий
от loz 14.04.15 21:38:33 MSK

Хорошо, что в Plan 9 компактный код. А то что делать, если в области видимости окажется больше 64 имён?

anonymous

(15.04.15 17:00:46 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от Unicode4all 14.04.15 21:55:57 MSK

Убивать!

Unicode4all

unicode на аватарке

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

loz ★★★★★

(15.04.15 17:13:03 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от anonymous 15.04.15 17:00:46 MSK

Не понял, а в чем проблема?

loz ★★★★★

(15.04.15 17:13:46 MSK)

  • Ссылка

Ответ на:

комментарий
от loz 15.04.15 17:13:03 MSK

А юникод тут и не причем. Я даже рад, что шланг нормально его поддерживает. Но зачем? Разве 1С мало?

  • Ссылка

Ответ на:

комментарий
от Aswed 15.04.15 11:09:39 MSK

Да, переключать раскладку дико неудобно. Но у всякой палки — два конца. Кстати, мне тут одна женщина сказала, что ей неудобно. Пришлось уволить.

fopen ★★

(16.04.15 02:50:53 MSK)

  • Показать ответ
  • Ссылка

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.

Содержание

  1. mirsovetov.net
  2. Андрощук Александр, ИТ решения, советы, заметки…
  3. stray # in program
  4. Типичные ошибки Arduino, читать всем новичкам или сносим не предупреждая!
  5. mechanic
  6. Error stray 320 in program
  7. migrated from security.stackexchange.com Oct 5 ’13 at 13:26
  8. 13 Answers 13
  9. 2 Answers 2
  10. protected by Community ♦ Jan 7 ’18 at 7:47
  11. maccatalan

mirsovetov.net

Андрощук Александр, ИТ решения, советы, заметки…

stray # in program

При компиляции проекта в Android IDE возникла ошибка

LampCore:20: error: stray ‘302’ in program

Код, который вызывал ошибку не был какой то особенный, была объявлена простенькая структура с полями:

В моем случае ошибка возникла из за того, что я случайно в названии структуры Config написал не латинский символ C. Самое интересное что с виду все кажется в порядке, а на самом деле это не так, и возникает ошибка «stray ‘320’ in program».

Так что решение — использовать только латинские символы (это не касается комментариев).

Также могут возникать другие ошибки такого же рода, только с другим кодом

Скорее всего что следующие ошибки:

error stray 2 in program

error stray 200 in program

error stray 201 in program

error stray 213 in program

error stray 223 in program

error stray 226 in program

error stray 227 in program

error stray 240 in program

error stray 253 in program

error stray 273 in program

error stray 302 in program

error stray 320 in program

error stray 321 in program

error stray 340 in program

error stray 342 in program

error stray 357 in program

error stray 361 in program

тоже связанны с этой проблемой, если это не так, пожалуйста отпишитесь в комментариях.

Источник

Типичные ошибки Arduino, читать всем новичкам или сносим не предупреждая!

mechanic

ЧИТАЕМ, НЕ ЛЕНИМСЯ!
99% всех проблем прошивки написаны здесь!

1. Плата подключается к компьютеру по USB, на ней должны замигать светодиоды. Если этого не произошло:

  • Неисправен USB кабель
  • Неисправен USB порт компьютера
  • Неисправен USB порт Arduino
  • Попробуйте другой компьютер, чтобы исключить часть проблем из списка
  • Попробуйте другую плату (желательно новую), чтобы исключить часть проблем из списка
  • На плате Arduino сгорел входной диод по линии USB из-за короткого замыкания, устроенного пользователем при сборке схемы
  • Плата Arduino сгорела полностью из-за неправильного подключения пользователем внешнего питания или короткого замыкания

2. Компьютер издаст характерный сигнал подключения нового оборудования, а при первом подключении появится окошко “Установка нового оборудования”. Если этого не произошло:

  • См. предыдущий список неисправностей
  • Кабель должен быть data-кабелем, а не “зарядным”
  • Кабель желательно втыкать напрямую в компьютер, а не через USB-хаб
  • Не установлены драйверы Arduino (во время установки IDE или из папки с программой), вернитесь к установке.

3. В списке портов (Arduino IDE/Инструменты/Порт) появится новый порт, обычно COM3. Если этого не произошло:

  • См. предыдущий список неисправностей
  • Некорректно установлен драйвер CH341 из предыдущего урока
  • Если список портов вообще неактивен – драйвер Arduino установлен некорректно, вернитесь к установке
  • Возникла системная ошибка, обратитесь к знакомому компьютерщику

Возникает на этапе сборки и компиляции прошивки. Ошибки компиляции вызваны проблемами в коде прошивки, то есть проблема сугубо софтварная. Слева от кнопки “загрузить” есть кнопка с галочкой – проверка. Во время проверки производится компиляция прошивки и выявляются ошибки, если таковые имеются. Ардуино в этом случае может быть вообще не подключена к компьютеру.

  • В некоторых случаях ошибка возникает при наличии кириллицы (русских букв) в пути к папке со скетчем. Решение: завести для скетчей отдельную папочку в корне диска с английским названием.
  • В чёрном окошке в самом низу Arduino IDE можно прочитать полный текст ошибки и понять, куда копать
  • В скачанных с интернета готовых скетчах часто возникает ошибка с описанием название_файла.h no such file or directory. Это означает, что в скетче используется библиотека , и нужно положить её в Program Files/Arduino/libraries/. Ко всем моим проектам всегда идёт папочка с использованными библиотеками, которые нужно установить. Также библиотеки всегда можно поискать в гугле по название файла.
  • При использовании каких-то особых библиотек, методов или функций, ошибкой может стать неправильно выбранная плата в “Инструменты/плата“. Пример: прошивки с библиотекой Mouse.h или Keyboard.h компилируются только для Leonardo и Micro.
  • Если прошивку пишете вы, то любые синтаксические ошибки в коде будут подсвечены, а снизу в чёрном окошке можно прочитать более детальное описание, в чём собственно косяк. Обычно указывается строка, в которой сделана ошибка, также эта строка подсвечивается красным.
  • Иногда причиной ошибки бывает слишком старая, или слишком новая версия Arduino IDE. Читайте комментарии разработчика скетча
  • Ошибка недостаточно свободного места возникает по вполне понятным причинам. Если в проекте используется плата Nano на процессоре 328p, а вы сэкономили три рубля и купили на 168 процессоре – скупой платит дважды. Оптимизация: статическая память – память, занимаемая кодом (циклы, функции). Динамическая память занята переменными.

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

  • expected ‘,’ or ‘;’ – пропущена запятая или точка запятой на предыдущей строке
  • stray ‘320’ in program – русские символы в коде
  • expected unqualified-id before numeric constant – имя переменной не может начинаться с цифры
  • … was not declared in this scope – переменная или функция используется, но не объявлена. Компилятор не может её найти
  • redefinition of … – повторное объявление функции или переменной
  • storage size of … isn’t known – массив задан без указания размера

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

  • USB кабель, которым подключается Arduino, должен быть Data-кабелем, а не кабелем только для зарядки. Нужным нам кабелем подключаются к компьютеру плееры и смартфоны.
  • Причиной ошибки загрузки являются не установленные/криво установленные драйвера CH340, если у вас китайская NANO.
  • Также будет ошибка avrdude: ser_open(): can’t open device, если не выбран COM порт, к которому подключена Arduino. Если кроме COM1 других портов нет – читай два пункта выше, либо попробуй другой USB порт, или вообще другой компьютер.
  • Большинство проблем при загрузке, вызванных “зависанием” ардуины или загрузчика, лечатся полным отключением ардуины от питания. Потом вставляем USB и по новой прошиваем.
  • Причиной ошибки загрузки может быть неправильно выбранная плата в “Инструменты/Плата”, а также неправильно выбранный процессор в “Инструменты/Процессор”. Также в свежих версиях IDE нужно выбирать ATmega328P (Old Bootloader) для китайских плат NANO.
  • Если у вас открыт монитор COM порта в другом окне Arduino IDE или плата общается через СОМ порт с другой программой (Ambibox, HWmonitor, SerialPortPlotter и т.д.), то вы получите ошибку загрузки, потому что порт занят. Отключитесь от порта или закройте другие окна и программы.
  • Если у вас задействованы пины RX или TX – отключите от них всё! По этим пинам Arduino общается с компьютером, в том числе для загрузки прошивки.
  • Если в описании ошибки встречается bootloader is not responding и not in sync, а все предыдущие пункты этого списка проверены – с вероятностью 95% сдох загрузчик. Второй неприятный исход – загрузчик “слетел”, и его можно прошить заново.

Помимо ошибок, по причине которых проект вообще не загрузится в плату и не будет работать, есть ещё предупреждения, которые выводятся оранжевым текстом в чёрной области лога ошибок. Предупреждения могут появиться даже тогда, когда выше лога ошибок появилась надпись “Загрузка завершена“. Это означает, что в прошивке нет несовместимых с жизнью ошибок, она скомпилировалась и загрузилась в плату. Что же тогда означают предупреждения? Чаще всего можно увидеть такие:

  • # Pragma message……. – сообщения с директивой Pragma обычно выводят библиотеки, сообщая о своей версии или каких-то настройках
  • Недостаточно памяти, программа может работать нестабильно – Чуть выше этого предупреждения обычно идёт информация о задействованной памяти. Память устройства можно добивать до 99%, ничего страшного не случится. Это флэш память и во время работы она не изменяется. А вот динамическую память желательно забивать не более 85-90%, иначе реально могут быть непонятные глюки в работе, так как память постоянно “бурлит” во время работы. НО. Это зависит от скетча и в первую очередь от количества локальных переменных. Можно написать такой код, который будет стабильно работать при 99% занятой SRAM памяти. Так что ещё раз: это всего лишь предупреждение, а не ошибка.

Завершая раздел Введение в Arduino поговорим о вопросах, которые очень часто возникают у новичков:

  • Ардуину можно прошить только один раз? Нет, несколько десятков тысяч раз, всё упирается в ресурс flash памяти. А он довольно большой.
  • Как стереть/нужно ли стирать старую прошивку при загрузке новой? Память автоматически очищается при прошивке, старая прошивка автоматически удаляется.
  • Можно ли записать две прошивки, чтобы они работали вместе? Нет, при прошивке удаляются абсолютно все старые данные. Из двух прошивок нужно сделать одну, причём так, чтобы не было конфликтов.
  • Можно ли “вытащить” прошивку с уже прошитой Ардуины?Теоретически можно, но только в виде нечитаемого машинного кода, в который преобразуется прошивка на С++ при компиляции, т.е. вам это НИКАК не поможет, если вы не имеете диплом по низкоуровневому программированию.
    • Зачем это нужно? Например есть у нас прошитый девайс, и мы хотим его “клонировать”. В этом случае да, есть вариант сделать дамп прошивки и загрузить его в другую плату на таком же микроконтроллере.
    • Если есть желание почитать код – увы, прошивка считывается в виде бинарного машинного кода, превратить который обратно в читаемый Си-подобный код обычному человеку не под силу
    • Вытащить прошивку, выражаясь более научно – сделать дамп прошивки, можно при помощи ISP программатора, об этом можно почитать здесь
    • Снять дамп прошивки можно только в том случае, если разработчик не ограничил такую возможность, например записав лок-биты, запрещающие считывание Flash памяти, или вообще отключив SPI шину. Если же разработчик – вы, и есть желание максимально защитить своё устройство от копирования – гуглите про лок-биты и отключение SPI

Источник

Error stray 320 in program

I am having problem compiling the followed exploit code:

I am using: «gcc file.c» and «gcc -O2 file.c» but both of them gets the following errors:

I tried compiling them on both Kali linux and Ubuntu 10.04 and get the same result.

migrated from security.stackexchange.com Oct 5 ’13 at 13:26

This question came from our site for information security professionals.

13 Answers 13

You have an invalid character on that line. This is what I saw:

You have invalid chars in your source. If you don’t have any valid non ascii chars in your source, maybe in a double quoted string literal, you can simply convert your file back to ascii with:

Edit: method with iconv will stop at wrong chars which makes no sense. The above command line is working with the example file. Good luck 🙂

I got the same with a character that visibly appeared as an asterisk, but was a UTF-8 sequence instead.

When compiled returned:

342 210 227 turns out to be UTF-8 for ASTERISK OPERATOR.

Deleting the ‘*’ and typing it again fixed the problem.

Whenever compiler found special character .. it gives these king of compile error . what error i found is as following

error: stray ‘302’ in program and error: stray ‘240’ in program

Some piece of code i copied from chatting messanger. In messanger it was special character only.. after copiying into vim editor it changed to correct character only. But compiler was giving above error .. then .. that stamenet i wrote mannualy after .. it got resolve.. 🙂

It’s perhaps because you copied code from net ( from a site which has perhaps not an ASCII encoded page, but UTF-8 encoded page), so you can convert the code to ASCII from this site :

There you can either detect errors manually by converting it back to UTF-8, or you can automatically convert it to ASCII and remove all the stray characters.

Codo was exactly right on Oct. 5 that &current[i] is the intended text (with the currency symbol inadvertently introduced when the source was put into HTML (see original): http://downloads.securityfocus.com/vulnerabilities/exploits/59846-1.c

Codo’s change makes this exploit code compile without error. I did that and was able to use the exploit on Ubuntu 12.04 to escalate to root privilege.

The explanations given here are correct. I just wanted to add that this problem might be because you copied the code from somewhere, from a website or a pdf file due to which there are some invalid characters in the code.

Try to find those invalid characters, or just retype the code if you can’t. It will definitely compile then.

With me this error ocurred when I copied and pasted a code in text format to my editor (gedit). The code was in a text document (.odt) and I copied it and pasted it into gedit. If you did the same, you have manually rewrite the code.

I noticed an issue in using the above tr command. The tr command COMPLETELY removes the «smart quotes». It would be better to replace the «smart quotes» with something like this.

This will give you a quick preview of what will be replaced.

This will do the replacements and put the replacement in a new file called WithoutSmartQuotes.txt.

sed s/[”“]/’»’/g File.txt > WithoutSmartQuotes.txt

This will overwrite the original file.

sed -i «.bk» s/[”“]/’»’/g File.txt

This problem comes when you have copied some text from html or you have done modification in windows environment and trying to compile in Unix/Solaris environment.

Please do «dos2unix» to remove the special characters from the file:

dos2unix fileName.ext fileName.ext

Sure, convert the file to ascii and blast all unicode characters away. It will probably work. BUT.

  1. You won’t know what you fixed.
  2. It will also destroy any unicode comments. Ex: //: A²+B²=C²
  3. It could potentially damage obvious logic, the code will still be broken, but the solution less obvious. For example: A string with «Smart-Quotes» (“ & ”) or a pointer with a full-width astrix ( * ). Now “SOME_THING” looks like a #define ( SOME_THING ) and *SomeType is the wrong type ( SomeType ).

Two more sugrical approaches to fixing the problem:

    Switch fonts to see the character. (It might be invisible in your current font)

Regex search all unicode characters not part non-extended ascii. In notepad++ I can search up to FFFF, which hasn’t failed me yet.

80 is hex for 128, the first extended ascii character.

After hitting «find next» and highlighting what appears to be empty space, you can close your search dialog and press CTRL+C to copy to clipboard.

Then paste the character into a unicode search tool. I usually use an online one. http://unicode.scarfboy.com/

Example: I had a bullet point (•) in my code somehow. The unicode value is 2022 (hex), but when read as ascii by the compiler you get 342 200 242 (3 octal values). It’s not as simple as converting each octal values to hex and smashing them together. So «E2 80 A2» is NOT the hex unicode point in your code.

For some weird reason, the following code doesn’t compile. I get a «stray ‘302’ in program» error around volatile unsigned int encoderPos = 0; , and I have no idea what the issue is. I’ve been trying to figure this out for over 40min, and nothing works. It doesn’t make any sense 😭

2 Answers 2

0302 is 0xc2. Somewhere in your source you have one or more non-breaking spaces (0xa0) encoded in UTF-8 (0xc2 0xa0). Use od or a similar tool to find them, and then replace them with normal spaces. Since you have non-ASCII Latin-1 characters in your source, those characters are encoded as two bytes with the first being 0xc2 or 0xc3. Remove all non-ASCII characters before proceeding.

One cause of the /(302) error is copy and paste code from a word processor. You have ASCII codes copied that add spaces, etc to your code. Go through each identified line and remove any extra spaces at the beginning and end of any identified line. Then, (Arduino IDE) go to TOOLS, Auto Format. At least, this cleared up the problem for me.

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

maccatalan

Registered

a source that compiled very well before now does not with the following error.

Here is the code :

When I let this «as it» I get compilation errors :

stray ‘320’ in program
stray ‘240’ in program

When I replace the draw-oval-in-rect instruction by :

then it works very well.

This problem depends only on the NSBezierPath instruction. I tried it on other projects, even empty projets and . nothing to do. Always the same two ununderstable errors.

Источник

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Error stray 200 in program
  • Error store is assigned a value but never used no unused vars
  • Error storage size of
  • Error statuslogger log4j2 could not find a logging implementation
  • Error startservicectrldispatcherw error ragent

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии