Вопросы с тегом «c-preprocessor»

Текстовый макропроцессор, применяемый перед компиляцией программ на языках C и C ++. Этот тег также можно использовать для вопросов о других компиляторах / языках, которые являются производными или имеют идентичные функции, такие как #directives в Objective-C или C #.

8
Перегрузка макроса по количеству аргументов
У меня есть два макроса FOO2и FOO3: #define FOO2(x,y) ... #define FOO3(x,y,z) ... Я хочу определить новый макрос FOOследующим образом: #define FOO(x,y) FOO2(x,y) #define FOO(x,y,z) FOO3(x,y,z) Но это не работает, потому что макросы не перегружают количество аргументов. Без изменения FOO2и FOO3, есть какой - то способ определить макрос FOO( с …
184 c  macros  c-preprocessor 

30
Когда полезны макросы C ++? [закрыто]
Закрыто . Этот вопрос должен быть более сфокусированным . В настоящее время он не принимает ответы. Хотите улучшить этот вопрос? Обновите вопрос, чтобы он был сосредоточен только на одной проблеме, отредактировав этот пост . Закрыто 2 года назад . Улучшить этот вопрос C препроцессор оправданно боялся и избегал сообщества C …



6
Использование __FILE__, __LINE__ и __FUNCTION__ в C ++
Предположив , что ваш компилятор C ++ поддерживает их, есть ли конкретная причина не в использовании __FILE__, __LINE__и __FUNCTION__для регистрации и целей отладки? В первую очередь меня интересует предоставление пользователю вводящих в заблуждение данных - например, сообщение о неправильном номере строки или функции в результате оптимизации - или снижение производительности …

2
Как дважды объединить с препроцессором C и развернуть макрос как в «arg ## _ ## MACRO»?
Я пытаюсь написать программу, в которой имена некоторых функций зависят от значения определенной макропеременной с помощью макроса: #define VARIABLE 3 #define NAME(fun) fun ## _ ## VARIABLE int NAME(some_function)(int a); К сожалению, макрос NAME()превращает это в int some_function_VARIABLE(int a); скорее, чем int some_function_3(int a); так что это явно неправильный путь. …

10
Стандартная альтернатива трюку GCC ## __ VA_ARGS__?
Существует известная проблема с пустыми аргументами для вариационных макросов в C99. пример: #define FOO(...) printf(__VA_ARGS__) #define BAR(fmt, ...) printf(fmt, __VA_ARGS__) FOO("this works fine"); BAR("this breaks!"); Использование BAR()вышеупомянутого действительно неверно в соответствии со стандартом C99, так как оно расширится до: printf("this breaks!",); Обратите внимание на запятую - не работает. Некоторые компиляторы …

3
Каково назначение одного знака фунта / хеша (#) на отдельной строке в препроцессоре C / C ++?
Я просматривал исходный код библиотек Boost и заметил, что часто встречаются знаки с одним фунтом без каких-либо прикрепленных к ним директив препроцессора. Я прочитал руководство по препроцессору GCC и руководство по спецификации и ничего не могу найти по этому поводу. (1) #ifndef BOOST_CONFIG_HPP (2) # include <boost/config.hpp> (3) #endif (4) …
145 c++  c  boost  c-preprocessor 

17
«#Include» текстовый файл в программе на C как char []
Есть ли способ включить весь текстовый файл в виде строки в программу C во время компиляции? что-то вроде: file.txt: This is a little text file main.c: #include <stdio.h> int main(void) { #blackmagicinclude("file.txt", content) /* equiv: char[] content = "This is\na little\ntext file"; */ printf("%s", content); } получение небольшой программы, которая …

15
Что лучше использовать #define, enum или const?
В проекте C ++, над которым я работаю, у меня есть значение типа флага, которое может иметь четыре значения. Эти четыре флага можно комбинировать. Флаги описывают записи в базе данных и могут быть: новый рекорд удаленная запись измененная запись существующая запись Теперь для каждой записи я хочу сохранить этот атрибут, …


14
Как мне показать значение #define во время компиляции?
Я пытаюсь понять, какую версию Boost использует мой код. Я хочу сделать что-то вроде этого: #error BOOST_VERSION но препроцессор не расширяет BOOST_VERSION. Я знаю, что могу распечатать его во время выполнения из программы, и я знаю, что могу посмотреть на вывод препроцессора, чтобы найти ответ. Я чувствую, что способ сделать …



4
Как определить платформу / компилятор из макросов препроцессора?
Я пишу кросс-платформенный код, который должен компилироваться в Linux, Windows, Mac OS. В Windows я должен поддерживать Visual Studio и Mingw. Есть некоторые фрагменты кода для конкретной платформы, которые я должен поместить в #ifdef .. #endifсреду. Например, здесь я разместил специальный код для Win32: #ifdef WIN32 #include <windows.h> #endif Но …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.