sizeof(char)
while(isdigit(string[j]) || isalpha(string[j])) { buf = (char *)realloc(buf, ++k * sizeof(char)); buf[k - 1] = string[j]; j++; }
parsed_string[size - 1] = (char *)malloc(strlen(buf) * sizeof(char)); strcpy(parsed_string[size - 1], buf);
Почему возможно объявление глобальной переменной
struct interval b
-- это определение переменной, выделяющее для неё место на стеке. Но его можно переписать, чтобы b тоже стало объявлением, например так:int main ()
{
extern struct interval b;
struct interval
{
int first;
int second;
};
}
struct interval b;
-- это tentative definition с внешней линковкой. Стандарт (С99) говорит о нём следующее (6.9.2:2):A declaration of an identifier for an object that has file scope without an initializer,
and without a storage-class specifier or with the storage-class specifier static, constitutes
a tentative definition. If a translation unit contains one or more tentative definitions for
an identifier, and the translation unit contains no external definition for that identifier,
then the behavior is exactly as if the translation unit contains a file scope declaration of
that identifier, with the composite type as of the end of the translation unit, with an
initializer equal to 0.
Как это понимать? Это что вся функция, которая нам устанавливает связь с сервером?
sysdeps/unix/sysv/linux/connect.c
, но всё что она делает -- это системный вызов, обёрнутый в манипуляции с pthread-cancellation.Вот так не работает: button_left.button_port = "PORTD";
А так работает:
struct button button_left = {"PORTD", 6, 0, 0, 0, 12};
Почему возникает ошибка при обращении к struct?
Почему-то меню показывается два раза после того, как я введу что-либо.
scanf("%c", &choice);
scanf(" %c%*[^\n]", &choice);
%c
проглотит все пробельные символы, %*[^\n]
проглотит хвост строки после первого прочитанного не-пробельного символа. Хотелось бы знать причину предупреждений, это стандартное поведение или несовершенство препроцессора?
_Generic((1), int : _Generic((2), int : fnk(1, 2,
# 37 "generic.c" 3 4
((void *)0)
# 37 "generic.c"
), char * : fnk(1, 0, 2)));
printf("\n2.2)---------\n");
_Generic((1), int : _Generic(("2"), int : fnk(1, "2",
# 40 "generic.c" 3 4
((void *)0)
# 40 "generic.c"
), char * : fnk(1, 0, "2")));
void fnk_int(uintmax_t A, uintmax_t B){
...
}
void fnk_pchar(uintmax_t A, char *B){
...
}
#define FFF_B(A, BC) \
_Generic((A), \
int : _Generic((BC), \
int : fnk_int, \
char * : fnk_pchar)(A, BC))
Что не так?
char *str = "hello";
char str[] = "hello";
Как практиковаться
Препроцессоры "глупые" и пихают весь код из подключенных заголовочных файлов, или только тот, что нужен программе после вставляет компоновщик?
P.S. Т.е. если перефразировать вопрос, то он бы звучал так: можно ли выборочно подключать только необходимые функции из подключаемых библиотек?
Если первой строчкой кода записать #include <stdio.h>
Как скопировать значение
#include <string.h>
void ShortNames(char **arr, int num)
{
int i;
for (i = 0; arr[i]; ++i) {
int len = strchr(arr[i], '=') - arr[i];
if (len <= num)
printf("%.*s\n", len, arr[i]);
}
}
Смысл его прост: отменить действие макроса в определенной части кода, а по ее истечении восстановить этот макрос.
#define temp func
значение макроса func не подставляется. В temp попадает буквально слово func
. После #undef func
содержимое макроса func будет потеряно. Это поведение предписано стандартом, мне неизветсны опции компилятора, которыми его можно было бы изменить. См. eelis.net/c++draft/cpp.replace#10 и eelis.net/c++draft/cpp.rescan#define foo bar
#define func foo
...
#undef func
...
#define func foo
пока z не сделаетется в 1024/1000000*255*20 секунд ждем
while (z < 21) { if (TCNT0 == 255) { z++; }; };
Русским языком говоря , нажал кнопку подождал примерно 5.2 с
Код не работает в протеусе и сыплет ошибками