Tag: c preprocessor

Определение переменной в файлах заголовков

Мои самые основные знания о C и процессе компиляции в последнее время стали ржавыми. Я пытался выяснить ответ на следующий вопрос, но я не мог подключить основы фазы компиляции, ссылки и предварительной обработки. Быстрый поиск в Google тоже не помог. Итак, я решил прийти к первому источнику знаний 🙂 Я знаю: переменные не должны определяться […]

Ошибка: недопустимые операнды типов ‘const char ‘ и ‘const char ‘ для двоичного ‘оператора +’

В верхней части моего файла у меня есть #define AGE “42” Позже в файле я использую ID несколько раз, включая некоторые строки, которые выглядят как 1 std::string name = “Obama”; 2 std::string str = “Hello ” + name + ” you are ” + AGE + ” years old!”; 3 str += “Do you feel […]

Разница между Enum и Define Statement

В чем разница между использованием инструкции define и оператора enum в C / C ++ (и есть ли разница при использовании их с C или C ++)? Например, когда следует использовать enum {BUFFER = 1234}; над #define BUFFER 1234

GCC, строение и встроенный GLSL?

Я хотел бы объявить строковые строки GLSL inline с помощью макроснижения: #define STRINGIFY(A) #A const GLchar* vert = STRINGIFY( #version 120\n attribute vec2 position; void main() { gl_Position = vec4( position, 0.0, 1.0 ); } ); Это строит и работает отлично, используя VS2010, но не компилируется на gcc с: error: invalid preprocessing directive #version Есть […]

Объединение int в строку с использованием препроцессора C

Я пытаюсь выяснить, как я могу объединить #define ‘d int в строку #define ‘ d, используя препроцессор C. Мой компилятор – это GCC 4.1 на CentOS 5. Решение также должно работать для MinGW. Я хотел бы добавить номер версии в строку, но единственный способ заставить ее работать – это сделать копию номера версии, определяемой как […]

Именование включает охранников

Как обычно C ++ содержат защитников? Я склонен видеть это много: #ifndef FOO_H #define FOO_H // … #endif Однако я не думаю, что это очень интуитивно. Не видя имени файла, сложно сказать, что такое FOO_H и к чему относится его имя. Что считается лучшей практикой?

# и ## в макросах

#include #define f(a,b) a##b #define g(a) #a #define h(a) g(a) int main() { printf(“%s\n”,h(f(1,2))); printf(“%s\n”,g(f(1,2))); return 0; } Просто взглянув на программу, можно «ожидать», что выход будет таким же, как для операторов printf. Но при запуске программы вы получаете ее как: bash$ ./a.out 12 f(1,2) bash$ Почему это так?

Является ли обратная косая черта приемлемой в директивах C и C ++ #include?

Существует два разделителя пути: Unix forward-slash и обратная косая черта DOS. Покойся в покое, толстая киска. Если они используются в директиве #include, они равны по правилам стандартов C ++ 11, C ++ 03 и C99?

Можно ли переопределить ключевое слово C ++?

В этой статье от гуру недели говорится: « It is illegal to #define a reserved word. Это правда? Я не могу найти ничего в норме, и я уже видел, как программисты переопределяли новые, например.

Понимание макроса container_of в ядре Linux

Когда я просматривал kernel ​​Linux, я обнаружил макрос container_of который определяется следующим образом: #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr – offsetof(type,member) );}) Я понимаю, что делает контейнер, но я не понимаю, это последнее предложение, которое (type *)( (char *)__mptr – offsetof(type,member) );}) […]

Давайте будем гением компьютера.