Articles of gcc

Embedded C – Слишком много аргументов функции (указатель)

Я пытаюсь вызвать следующий макрос в моем .cpp файле: #define IAP_ROM_LOCATION 0x1FFF1FF1UL #define IAP_EXECUTE_CMD(a, b) ((void (*)())(IAP_ROM_LOCATION))(a, b) Однако, когда я называю указанную функцию так: IAP_EXECUTE_CMD(0, 0); Я получаю сообщение об ошибке, указывающее слишком много аргументов? Как это? Буду признателен за любые указатели. Среда разработки – GCC для Cortex-M3.

Еще одна MinGW “gcc: error: CreateProcess: Нет такого файла или каталога”

Я установил компилятор MinGW C в Windows 8 (64 бит) через установщик GUI. Но когда я пытаюсь скомпилировать C-программу, gcc говорит: gcc: CreateProcess: Нет такого файла или каталога Это обычная ошибка, и я пробовал все решения, которые я нашел, без успеха. В частности, (после CreateProcess: Нет такого файла или каталога ) я попытался: [EDITED] Добавить […]

Как заставить gcc предупреждать о возврате адреса локальных переменных?

С gcc 4.4.5 у меня есть предупреждение со следующим кодом. char *f(void) { char c; return &c; } Но, когда я использую временный указатель, больше нет предупреждений (даже если поведение неверно). char *f(void) { char c; char *p = &c; return p; } Я слышал, что анализ указателей в C затруднен, но может gcc предупредить […]

Вопросы о прототипах функций и компиляции

Со следующим кодом: int main(){ printf(“%f\n”,multiply(2)); return 0; } float multiply(float n){ return n * 2; } Когда я пытаюсь скомпилировать, я получаю одно предупреждение: ««% f »ожидает« double », но аргумент имеет тип« int »и две ошибки:« конфликтующие типы для «multiply» »,« предыдущее неявное объявление «multiply» было Вот.” Вопрос 1 : Я предполагаю, что […]

Можно ли успешно завершить метод выхода?

В настоящее время я использую gcc 4.1.2, и у меня есть прецедент, где я хочу использовать параметры компоновщика, чтобы обернуть метод exit. Давайте немедленно отложим все типичные ответы / комментарии: «Почему вы даже хотите это сделать?» Я хочу знать, если это возможно. Я обернул другие методы, используя компоновщик, без каких-либо проблем. Ниже приведен краткий пример […]

Как указать размер enums в GCC?

Я хочу указать размер enums в 64 бита для enums. Как это возможно через GCC? Код не обязательно должен быть «переносимым», потому что меня интересует только то, что код работает над компиляцией GCC для x86-32 и x86-64 Linux. Это означает, что любой хак, который может обеспечить функциональность, которую я хочу, хорош, пока он работает для […]

C-блок становится выражением: ({int a = 1; int b = 2; a + b;}) равно 3

Во время чтения http://en.wikipedia.org/wiki/C_preprocessor#Multiple_evaluation_of_side_effects я наткнулся на этот пример: \#define max(a,b) \ ({ typeof (a) _a = (a); \ typeof (b) _b = (b); \ _a > _b ? _a : _b; }) // WHY DOES THIS LINE WORK? Который вы можете использовать точно как функция, т. max(1,2) – выражение, оценивающее значение 2. Мой вопрос: […]

Правила области в C: Вложенные блоки

У меня есть следующая вложенная функция: int main() { int a, b, c; a = 10; int foo() { int a, b, c; //some more code here } // some more code here } Теперь мне нужно назначить переменную a , принадлежащую foo() , со значением переменной a которая принадлежит main() . В принципе, что-то […]

C – скомпилировать с зависимостями

У меня есть код, который я хочу запустить на машине, к которой у меня нет доступа root. У этой машины нет некоторых библиотек, необходимых для запуска этого кода. Есть ли способ включить все зависимости при компиляции? Я понимаю, что результирующий файл может быть довольно большим.

что такое разбивка стека (C)?

Код: int str_join(char *a, const char *b) { int sz =0; while(*a++) sz++; char *st = a -1, c; *st = (char) 32; while((c = *b++)) *++st = c; *++st = 0; return sz; } …. char a[] = “StringA”; printf(“string-1 length = %d, String a = %s\n”, str_join(&a[0],”StringB”), a); Выход: string-1 length = 7, […]