C++, Получающий размер типа в макро-условном выражении

Используйте модуль csv:

import csv
...

with open(in_fnam) as in_file:
    with open(out_fnam, 'w') as out_file:
        writer = csv.writer(out_file)
        for row in csv.reader(in_file):
            if row:
                writer.writerow(row)

Если вам также необходимо удалить строки, в которых все поля пусты, измените строку if row: на:

if any(row):

И если вы также хотите обрабатывать поля, состоящие только из пробелов, как пустые, вы можете заменить их на:

if any(field.strip() for field in row):

Обратите внимание, что в Python 2.x и более ранних версиях csv ожидаемые двоичные файлы, поэтому вам необходимо открыть файлы с флагом e 'b'. В 3.x это приведет к ошибке.

8
задан Fire Lancer 2 August 2009 в 15:47
поделиться

6 ответов

Думаю, могут помочь такие вещи, как BOOST_STATIC_ASSERT .

4
ответ дан 5 December 2019 в 05:19
поделиться

Нет, этого нельзя сделать, потому что все расширения макросов (# ... вещи) выполняются на этапе препроцессора, который ничего не знает о типах кода C ++ и даже не нужно ничего знать о языке! Он просто расширяет / проверяет # ... вещи и ничего больше!

Есть и другие распространенные ошибки, например:

enum XY
{
  MY_CONST = 7,
};

#if MY_CONST == 7
  // This code will NEVER be compiled because the pre-processor does not know anything about your enum!
#endif //

Вы можете получить доступ и использовать только те вещи в #if, которые определены с помощью параметров командной строки для компилятор или через #define.

14
ответ дан 5 December 2019 в 05:19
поделиться

The preprocessor works without knowing anything about the types, even the builtin one.

BTW, you can still do the check using a static_assert like feature (boost has one for instance, C++0X will have one).

Edit: C99 and C++0X have also WCHAR_MIN and WCHAR_MAX macros in

7
ответ дан 5 December 2019 в 05:19
поделиться

sizeof() is a runtime compile-time function. You cannot call that in a preprocessor directive. I don't think you can check the size of wchar_t during preprocessing. (see Edit 2)

Edit: As pointed out in comments, sizeof() is mostly calculated at compile time. In C99, it can be used at runtime for arrays.

Edit 2: You can do asserts at build time using the techniques described in this thread.

3
ответ дан 5 December 2019 в 05:19
поделиться

Разве вы не получили бы в основном то, что хотели (ошибка компиляции без необычного сообщения), используя C_ASSERT?

#define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
3
ответ дан 5 December 2019 в 05:19
поделиться
char _assert_wchar_t_is_16bit[ sizeof(wchar_t) == 2 ? 1 : -1];
1
ответ дан 5 December 2019 в 05:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: