c99- все статьи тега
stdlib.H не имеет декларации для putenv
Я попытался скомпилировать следующий код с gcc 4.7.3 и clang 3.2.1 на Ubuntu 13.04 (64-бит): #include <stdio.h> #include <stdlib.h> #include <stdbool.h> int main() { putenv("SDL_VIDEO_CENTERED=1"); return 0; } Я ожидал, что putenv будет объявлено в заголовке stdlib.h, но я получаю следующее предупреждение: test.c: In function ‘main’: test.c:6:5: warning: implicit declaration of function ‘putenv’ [-Wimplicit-function-declaration] Почему объявление для этой функ ...
Можно ли поручить C не инициализировать глобальные массивы нулем?
Я пишу встроенное приложение, и почти вся моя оперативная память используется глобальными байт-массивами. Когда моя прошивка загружается, она начинается с перезаписи всего раздела BSS в оперативной памяти с нулями, что в моем случае совершенно не нужно. Могу ли я каким-то образом указать компилятору, что ему не нужно инициализировать нуль определенные массивы? Я знаю, что это также можно решить, объявив их указателями и используя malloc (), но есть несколько причин, по которым я хочу этого избе ...
C99 stdint.H заголовок и MS Visual Studio
к моему удивлению, я только что обнаружил, что C99 stdint.h отсутствует в MS Visual Studio 2003 вверх. Я уверен, что у них есть свои причины, но кто-нибудь знает где я могу скачать копию? Без этого заголовка у меня нет определений для полезных типов, таких как uint32_t и т. д. ...
преобразование bool в int
насколько портативно это преобразование. Могу ли я быть уверен, что оба утверждения проходят? int x = 4<5; assert(x==1); x = 4>5; assert(x==0); Не спрашивайте почему. Я знаю, что это некрасиво. Спасибо. ...
Это "инлайн", без "статического" или "Экстерн" когда-нибудь полезны в C99?
когда я пытаюсь построить этот код inline void f() {} int main() { f(); } С помощью командной строки gcc -std=c99 -o a a.c я получаю ошибку компоновщика (неопределенная ссылка на f). Ошибка исчезает, если я использую static inline или просто inline, или если я компиляции с -O (таким образом, функция фактически встроена). такое поведение, по-видимому, определено в пункте 6.7.4 (6) стандарта C99: если все объявления области действия файла для a функция в блоке перевода включает в ...
Как компилятор выделяет память, не зная размер во время компиляции?
Я написал программу C, которая принимает целочисленный ввод от пользователя, который используется как размер целочисленного массива, и с помощью этого значения он объявляет массив заданного размера, и я подтверждаю это, проверяя размер массива. код: #include <stdio.h> int main(int argc, char const *argv[]) { int n; scanf("%d",&n); int k[n]; printf("%ld",sizeof(k)); return 0; } и на удивление это правильно! Программа способна создать массив нужного размера. Но вс ...
Разница между тип uint8 т т и uint uint с fast8 least8 Т
стандарт C99 вводит следующие типы данных. Документацию можно найти здесь для библиотеки AVR stdint. uint8_t означает, что это 8-битный беззнаковый тип. uint_fast8_t означает, что это самый быстрый unsigned int с по крайней мере 8 биты. uint_least8_t означает, что это беззнаковый int с не менее чем 8 битами. Я понимаю uint8_t и что такое uint_fast8_t( Я не знаю, как это реализовано в уровень регистра). 1.Можете ли вы объяснить, что означает "это unsigned int по крайней мере 8 бит"? 2.Ка ...
Можно ли перебирать аргументы в вариативных макросах?
мне было интересно, можно ли перебирать аргументы, переданные в вариационный макрос в C99 или используя любые расширения GCC ? например, можно ли написать общий макрос, который принимает структуру и ее поля, передаваемые в качестве аргументов, и печатает смещение каждого поля в структуре ? что-то вроде этого: struct a { int a; int b; int c; }; /* PRN_STRUCT_OFFSETS will print offset of each of the fields within structure passed as the first argument. */ int main(int argc, c ...
func () vs func (void) в c99
void func() На практике пустой параметр означает, что принимается любой аргумент. void func(void) принимает никаких аргументов. но в стандартном C99, я нахожу такие строки: 6.7.5.3 деклараторы функций (включая прототипы) 14 список идентификаторов объявляет только идентификаторы параметров функции. пустой список в деклараторе функции, который является частью определения этой функции указывает, что функция не имеет параметров. пустой список в деклараторе функции, который не является частью ...
Установка флага std=c99 в GCC
мне было интересно, есть ли какие-либо файлы, в которых я мог бы установить -std=c99 флаг, так что мне не придется устанавливать его для каждой компиляции. Я использую GCC 4.4 на Ubuntu. ...