У меня есть чувствительный к производительности код CUDA, который я использую
#ifdef DEBUG_<NAME_OF_SECTION>
...
#else
...
#endif
...условные выражения для инкапсуляции замедляющего скорость отладочного кода, который получает дополнительную информацию от графического процессора.
В emacs (Centos 6.0) все идет хорошо до #else
.
Это отменяет отступ (на 1 табуляцию) текста внутри предложения else препроцессорного условного оператора и продолжает отменять отступ для всего впоследствии.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Примечание:
)
репликация внутри условных выражений препроцессора, похоже, правильно обрабатывается C-режимом. Но );
дублирование ломает вещи, заставляя вас перемещать );
за пределы условного... боже мой, как непоследовательно. Я оставлю этот вопрос открытым, пока мы не получим правильный код elisp для исправления этого несоответствия.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ПРИМЕЧАНИЕ по текущему ответу:
Йенс предоставил неточную информацию информация в утверждении, что отступ, вложенный )
внутри условных выражений, «невозможен». Это не только возможно, но и Emacs C-Mode активно делает это. Обратите внимание на правильный отступ примера программы c в конце этого сообщения с вопросом для доказательства этого. Таким образом, логично предположить, что );
также можно сделать отступ, хотя следует соблюдать осторожность по причинам, изложенным Йенсом.
В любом случае, я хочу убедиться, что люди видят, что это утверждение неверно, и не думают, что на этот вопрос нет ответа. Я удалю этот комментарий и свой отрицательный голос к сообщению Йенса, когда он исправит свои неточные утверждения, чтобы отразить, что это возможно, реализовано в 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 внутри вызова функции....