Запитання з тегом «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( з використанням __VA_ARGS__або …
183 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
Стандартна альтернатива трюку ## __ VA_ARGS__ GCC?
Існує добре відома проблема з порожніми аргументами для макросів в змінному числі 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) # (5) #if defined(BOOST_HAS_PRAGMA_ONCE) (6) # …
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. У вікнах я повинен підтримувати візуальну студію та mingw. Є деякі фрагменти коду, що залежить від платформи, який я повинен розмістити в #ifdef .. #endifоточенні. Наприклад, тут я розмістив специфічний код win32: #ifdef WIN32 #include <windows.h> #endif Але …

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.