Как бы Вы написали в makefile если бы у Вас имелось 0.c 1.c 2.c 3.h? Заголовочник 3.h для всех исходников
OBJS := 0.o 1.o 2.o # список объектников, который нам понадобится в двух местах
all: exe # традиционно сборка всего называется all. all зависит от единственного файла: exe
exe: $(OBJS) # файл exe зависит от объектникоа
$(CC) $(LDFLAGS) -o $@ $^ # чтобы собрать exe -- вызвать компилятор, передать ему LDFLAGS, выводить в $@ (т.е. в exe), на вход брать $^ (т.е. всё от чего зависит $@)
%.o: %.c 3.h # объектники зависят от исходников с таким же именем, а так же от 3.h
$(CC) -c $(CFLAGS) -o $@ $< # чтобы собрать объектник -- вызвать компилятор с ключом -c, передать ему CFLAGS, выводить в $@ (т.е. в %.o), компилировать $< (т.е. %.с с тем же именем)
clean: # традиционно очистка всего называется clean
-rm -f $(OBJS) exe # для очистки удалить объектники и exe
.PHONY: all clean # all и clean -- это не файлы
struct tableI { char* name[4]; float doctor[100]; float bunk[100]; } tableI; ... struct tableI a; ... get_name(a.name[0]);
Почему при выводе блока с таблицой выбивает ошибку?
struct tableI
{
char name[4][100];
float doctor[100];
float bunk[100];
} tableI;
strcpy(A[i+1].firstName, A[i].firstName); ... A[i].age = A[i+1].age;
суть конкретно этого куска задачи — удаление строки с данным(делаю путем переприсваивания на следующую строку и уменьшением количества строк на единицу)
Казалось бы, в обоих случаях у нас вызов конструктора,
A a();
-- это объявление функции a, без параметров, возвращающей значение типа A.
И получаем странную ошибку при компиляции:
ssd1306_128x32_i2c_test.ino:50:3: error: request for member 'f' in 'a', which is of non-class type 'A()'
Есть две машины, подключенные через маршрутизатор.
написать драйвер устанавливающий соединение, обмен ключами и шифрование всех пакетов между машинами
на каком уровне OSI
printf("something\n")
, без точки с запятой -- это expression, а именно вызов функции) и "statement" (например if (expression) statement
-- это statement), а иногда expression может быть statement'ом (например, printf("something\n");
, с точкой с запятой), это называется "expression statement".
Как называть по-человечески строчки:if ( a > b ) printf("something\n");
if
с единственной инструкцией-выражением.А такое:if(condition) { printf("something1\n"); printf("something2\n"); }
if
с составной инструкцией содержащей две инструкции-выражения. Есть от 30 до 70 esp8266, которые генерируют данные и должны отправлять эти данные на сервер.
Как это организовать ?
Почему программа ломается при освобождении памяти?
char *response = new char[line.size()]; std::strcpy(response, line.c_str());
char *response = new char[line.size() + 1];
Весь код считает сколько символов с строке введены пользователем
set<char> c(text.begin(), text.end()); // (std::)set<char> -- это множество (без повторений) символов.
// с -- это имя переменной.
// Конструктор множества с двумя итераторами добавляет во множество
// все объекты между этими итераторами. Т.е. все буквы из строки text.
int col = c.size(); // про c -- см. выше. std::set::size возвращает размер множества.
мне надо в цикле на каждой итерации запрашивать ввод строки.
cin » s1
позволяет это сделать, а
scanf("%255[^\n]", s1)
только 1 раз.
scanf("%255[^\n]\n", s1);
char *p;
scanf("%m[^\n]\n", &p);
В онлайн компиляторе все норм
char * readLine() {
std::string line = "";
...
std::cout<< (char *)line.c_str()<<"\n"; // Response - все норм
return (char *)(line.c_str());
// в этот момент line уничтожается, и вместе с ним становятся недействительными
// указатели полученные функцией c_str()
}
std::string
, не мудри. Как работают функции sleep