Почему если считывать число как long double, то результат получается нормальным,
input 2 => output 8.000000 (%lf)
%lf
-- это не long double, а просто double. %f
-- это float, а long double -- это %Lf
. См. man scanf.Почитал, что ядро Linux использует стандарт C90,
хотелось бы писать на K&R C
Какой стандарт наиболее поддерживаемый сейчас и распространён среди программистов под настольные ОС
при компиляции файла copy.c вылетают ошибки
In function `main':
copy.c:(.text+0x67): undefined reference to `usageErr'
copy.c:(.text+0xb6): undefined reference to `errExit'
copy.c:(.text+0x122): undefined reference to `errExit'
gcc copy.c error_functions.c -o copy
Почему в С допускают такое?
If an attempt is made to modify an object defined with a const-qualified type through use
of an lvalue with non-const-qualified type, the behavior is undefined.
const char *
, а возвращает char *
? Чтобы показать, что сама она свой аргумент не изменяет, но чтобы не заставлять всех её пользователей делать приведение типа у результата. Я бы сказал, что проблема в этой функции, но она настолько старая, что никто не будет чинить её прототип.char *strchr(char *, char)
и const char *strchr(const char *, char)
, но в С нет перегрузки функций. arr
это же просто указатель.
Почему нельзя сменить его значение что бы он указывал на новый адрес
void f(int arr[])
{
arr = arr + 1;
}
И почему нельзя создавать массивы (не символьные) в стиле указателей?int * arr = {1, 2, 3, 4, 5}; // ne ok
int * arr = (int []){1, 2, 3, 4, 5}; // ok
Объясните почему именно так, с умножение переполняется, а при сложении как будто просто отсекаются лишние биты.
char num1[N]; char num2[N]; char num3[N]; char *nums[3] = {num1,num2,num3};
nums[3][N]
?while(c=fgetc(in))
if ( c == '\n' || c == ' ' )
if ( c == '\n' || c == ' ' || c == EOF)
(*(nums+i))[j]
nums[i][j]
?int length(char s[]){
strnlen
из string.hОткуда диапазон значений, тоже понятно. Но что конкретно происходит при попытке выйти за этот диапазон?
Почему при вычислении степеней двойки в какой-то момент выводится минимальное значение, -32768, а затем - одни нули?
Что происходит при других операциях со слишком большими числами?
Проект создаёт статическую библиотеку mylib, но в неё не включена требуемая реализация boost, то есть при линковке приложения с mylib нужно явно указывать, что нужно линковать boost.
pkg-config --libs <имя библиотеки>
и получает список ключей для линковки. $ cat > dump-fp.c <<EOF
#include <inttypes.h>
#include <string.h>
#include <stdio.h>
void dump_float(float v)
{
uint32_t i;
memcpy(&i, &v, sizeof(i));
printf("0x%08"PRIx32"\n", i);
}
void dump_double(double v)
{
uint64_t i;
memcpy(&i, &v, sizeof(i));
printf("0x%016"PRIx64"\n", i);
}
int main(void)
{
dump_float(1.0f);
dump_double(1.0l);
return 0;
}
EOF
$ gcc dump-fp.c -o dump-fp
$ ./dump-fp
0x3f800000
0x3ff0000000000000
Как исправить ошибку «stdio.h: No such file or directory »?
#include "..." search starts here:
#include <...> search starts here:
Мне нужно прочитать из заголовка адрес точки входа