У меня есть чувствительный к производительности код CUDA, который я использую
#ifdef DEBUG_<NAME_OF_SECTION>
...
#else
...
#endif
... условия для инкапсуляции кода отладки скорости, который собирает дополнительную информацию с графического процессора.
В emacs (Centos 6.0) все идет хорошо до #else
.
Этот deindent (на 1 вкладку) текст внутри условия else условного препроцессора и продолжает deindent все после.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Примечание:
)
Репликация внутри условных выражений препроцессора, кажется, правильно обрабатывается в C-режиме. Но );
дублирование ломает вещи, вынуждая вас переместить );
за пределы условного ... о дорогой, как непоследовательный. Я держу этот вопрос открытым до тех пор, пока мы не получим правильный код elisp, чтобы исправить это несоответствие.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ПРИМЕЧАНИЕ по текущему ответу:
Jens предоставил неточную информацию, утверждая, что отступ, вложенный в )
внутри условных выражений, "невозможен". Это не только возможно, но C-Mode Emacs активно делает это. Обратите внимание на правильные отступы примера программы c в конце этого вопроса для доказательства этого. Таким образом, было бы понятно, что );
также возможен для отступа, хотя следует соблюдать осторожность по причинам, указанным в Jens .
Во всяком случае, я хочу убедиться, что люди видят, что это утверждение неверно, поэтому они не считают этот вопрос без ответа. Я удалю этот комментарий и мое понижение на пост Дженса, когда он исправит свои неточные утверждения, чтобы отразить, что это возможно, реализован в C-режиме для самого случая )
, который он обрисовал, но не рекомендуется.
В настоящее время я прибегаю к ручному перераспределению ресурсов на одну вкладку, но это тратит много времени (код длинный).
Любая идея, что я могу добавить в мой файл ~ / .emacs, чтобы это исправить ???
Заранее спасибо!
РЕДАКТИРОВАТЬ 1
Я должен упомянуть, что предложение, которое кажется подавленным, является закрытием функции, например,
MyFunc<<<Blk,Thr>>>(Stuff1,
#ifdef DEBUG_FUNC1
Stuff2,
dev_Debug);
#else
Stuff2); //Deindents here.
#endif
//Everything here on out is deindented.
Это может быть конкретный сбой в такой структуре кода ...
РЕДАКТИРОВАТЬ 2
Вот простая версия кода на C ... код работает, как и ожидалось, но не является префиксом последнего предложения #else
...
#include <stdio.h>
//#define DEBUG
void printer
(int A,
#ifdef DEBUG
int B,
int C)
#else
int B)
#endif
{
#ifdef DEBUG
printf("A: %i, B: %i, C: %i\n", A, B, C);
#else
printf("A: %i, B: %i\n", A, B);
#endif
}
int main()
{
int A = -3;
int B = 1;
int C = 3;
printer(A,
#ifdef DEBUG
B,
C);
#else
B);
#endif
return 0;
}
... это похоже на то, что я делаю. Я знаю, что он синтаксически работает в C (или, по крайней мере, я думаю, что ... он дает правильные результаты), однако emacs не нравится это предложение #else внутри вызова функции ....