Я пытаюсь выяснить, как включить определения HLASM и Metal C для одного и того же DSECT / struct в один набор данных / файл.
Прежде чем попробовать это, я попробовал то, что описал в Как мне сделать эту работу с #include? Он отлично работает, когда попадает прямо в код
Итак, я пошел по другому пути и решил, что могу использовать #define, чтобы изменить инструкцию MACRO в ассемблере на что-то, что будет использовать компилятор C:
- Измените "MACRO" на "#pragma margins (2,72)"
Измените "MEND" на "#pragma nomargins"
EDIT SSAF.METALC.H(CKKTEST) - 01.01 Columns 00001 00080
Command ===> Scroll ===> CSR
****** ********************************* Top of Data **********************************
000001 MACRO
000002 */* First line of macro prolog */
000003 */* Last line of macro prolog */
000004 *#if 0!=0 // Bypass asm in C
000005 Test DSECT
000006 Test@ DS A
000007 TestINT DS F
000008 TestChar DS C
000009 *#endif
000010 MEND
000011 struct Test {
000012 void *Test@;
000013 int TestInt;
000014 char TestChar;
000015 };
****** ******************************** Bottom of Data ********************************
И я решил, что мог бы использовать #define, чтобы изменить «MACRO» и «MEND» на вещи, которые хотел бы компилятор C, сначала я попытался без кавычек:
EDIT SSAF.METALC.C(CKLTHING) - 01.01 Columns 00001 00080
Command ===> Scroll ===> CSR
000207 #define MACRO #pragma margins(2,72)
000208 #define MEND #pragma nomargins
000209 #include"ckktest.h"
Который не дал желаемые результаты:
|
207 |#define MACRO #pragma margins(2,72)
208 |#define MEND #pragma nomargins
209 |#include"ckktest.h"
*=ERROR===========> CCN3191 The character # is not a valid C source character.
*=ERROR===========> CCN3166 Definition of function pragma requires parentheses.
*=ERROR===========> CCN3191 The character # is not a valid C source character.
*=ERROR===========> CCN3191 The character # is not a valid C source character.
*=ERROR===========> CCN3191 The character # is not a valid C source character.
*=ERROR===========> CCN3276 Syntax error: possible missing '{'?
Затем я попытался заключить значение #define в кавычки:
207 |#define MACRO "#pragma margins(2,72)"
208 |#define MEND "#pragma nomargins"
209 |#include"ckktest.h"
*=ERROR===========> CCN3191 The character # is not a valid C source character.
*=ERROR===========> CCN3191 The character # is not a valid C source character.
210 |
Это дает меньше сообщений об ошибках,но все еще не то, что мне нужно.
Примечание: я использую # EBCDIC 7B.
Описание сообщения об ошибке довольно краткое:
CCN3191символ & 1 не является допустимым исходным символом C. Пояснения См. Справочник по языку C / C ++ для получения информации о допустимых символах.
В тексте сообщения:
& 1 - это символ.
Ответ пользователя Изменить символ.
Я ссылался на справочник по языку C / C ++ и не смог найти ничего, что говорит, что я не могу использовать "#" внутри #define. На самом деле есть несколько слов об операторах # и ## ...
Есть ли способ обойти это?
Спасибо, Скотт