Объясните, пожалуйста, сакральный смысл #define
наверное, чтоб можно было потом #ifdef использовать
Ыыыы.
Может быть чтобы если кто случайно задефайнит что-нибудь из списка, он получил ошибку компиляции?
Может быть чтобы если кто случайно задефайнит что-нибудь из списка, он получил ошибку компиляции?
для этого есть
вариант более правдоподобен, однако отдаёт какой-то параноидальностью
почему бы тогда так не защитить всю библиотеку, начиная с printf, и т.п.
например, есть очевидный косяк - если в программе есть функция "abort" или "exit", то полученный exe-шник (a.out) не работоспособен
#ifndef _FTW_H
#define _FTW_H 1
вариант более правдоподобен, однако отдаёт какой-то параноидальностью
почему бы тогда так не защитить всю библиотеку, начиная с printf, и т.п.
например, есть очевидный косяк - если в программе есть функция "abort" или "exit", то полученный exe-шник (a.out) не работоспособен
для этого естьнет, не для этого
возможно...
есть какие-то причины сделать флаги енумом, а не дефайном сразу, типа как тут?
есть какие-то причины сделать флаги енумом, а не дефайном сразу, типа как тут?
/* The possibilities for the third argument to `fseek'.
These values should not be changed. */
#define SEEK_SET 0 /* Seek from beginning of file. */
#define SEEK_CUR 1 /* Seek from current position. */
#define SEEK_END 2 /* Seek from end of file. */
А в истории коммитов нет ничего? Обычно такие вещи объясняют, если конечно не пофигисты писали.
это наверное придумали в каком-нибудь 1975, когда не было такого слова - коммит
может быть, чтобы пространство имён не сильно загрязнять?
ну то есть локальную переменную можно назвать таким же именем, и всё ок
то, что я ща в гугле нашёл на эту тему, в основном про это
может быть, чтобы пространство имён не сильно загрязнять?
ну то есть локальную переменную можно назвать таким же именем, и всё ок
то, что я ща в гугле нашёл на эту тему, в основном про это
я думаю по началу был старый код в Си-стиле, через define-ы. потом его решили заапгрейдить, переписали на enum-ы. но это нарушает обратную совместимость, у людей перестает работать код в котором ifdef-ы на эти define-ы. поэтому рядом с enum-ами оставили define-ы.
PS. enum-ы круче define-ов например потому что можно вот так клёво оверлодить
PS. enum-ы круче define-ов например потому что можно вот так клёво оверлодить
[xoft c++]$ cat enum.cpp
#include <iostream>
using namespace std;
enum X {
X1 = 10,
X2 = 20,
};
ostream & operator << (ostream & os, const X & x) {
if (x == X1) {
os << "X1";
} else if (x == X2) {
os << "X2";
} else {
os << "X" << int(x);
}
return os;
}
int main {
cout << X1 << " " << X(5) << endl;
}
[xoft c++]$ ./enum
X1 X5
Unix has you
Я, кстати, согласен с Гадфазером наверное. Обратите внимание — там часть значений сама обёрнута в ifdef. Ну и наверное правильнее проверять, допустимо ли некое значение непосредственно, чем через определяющее его наличие условие или ещё как-то.
> есть какие-то причины сделать флаги енумом, а не дефайном сразу, типа как тут?
> #define SEEK_SET 0 /* Seek from beginning of file. */
Есть причины не делать этого.
---
"Narrowness of experience leads to narrowness of imagination."
> #define SEEK_SET 0 /* Seek from beginning of file. */
Есть причины не делать этого.
---
"Narrowness of experience leads to narrowness of imagination."
> Объясните, пожалуйста, сакральный смысл #define
> вот тут:
> enum
> {
> FTW_F, /* Regular file. */
> #define FTW_F FTW_F
Есть такое слово --- "совместимость."
---
"Рот фронт, группенфюрер..."
> вот тут:
> enum
> {
> FTW_F, /* Regular file. */
> #define FTW_F FTW_F
Есть такое слово --- "совместимость."
---
"Рот фронт, группенфюрер..."
Есть такое слово --- "совместимость."зачем ты это пишешь? Да, есть, здесь это можно понять многими способами, скажи, что ты имел в виду.
его не так уж и сложно понимать, нужно всего-лишь использовать мозг
вот тут:был говнокод.
наверное, чтоб можно было потом #ifdef использоватьКстати да, чтобы использовать #ifdef достаточно написать #define FTW_F, но там именно #define FTW_F FTW_F, что как бы говорит нам...
как ни странно, если написать #define FTW, то потом FTW нельзя будет использовать

как нельзя?
#include <stdio.h>
#define WTF
int WTF main(WTF WTF WTF)
{
WTF printf WTF(WTF "Hello!\n" WTF);
return WTF 0 WTF;
}
WTF WTF WTF
как нельзя?осмысленно нельзя
осмысленно нельзяэто еще почему?
#include <stdio.h>
#define FTW jgdfvs
int main
{
int FTW = 8;
printf("%d\n", FTW);
}
Читаем внимательней:
если написать #define FTWУ тебя же в третьей строке написано другое.
даже если и так, #undef пока ещё никто не отменял.
Причем здесь это? Ты можешь привести пример осмысленного использования макроса с пустым значением, кроме как в инструкциях препроцессора (вариант, когда это значение условно пустое, то есть пустое при выполнении какого-то условия, не считается)?
#define _IN_
#define _OUT_
#define _LENGTHOF_(x)
void F(_IN_ char*str, _IN_ _LENGTHOF_(str) unsigned length, _OUT_ int* something);
Оставить комментарий
yolki
вот тут: