1

我有一个代码块,我想在我的 z/OS Metal C 程序中#include,当它只是程序的一部分时它工作正常,但是当我将它放入 .h 文件并#include 它时,代码赢了不编译。

我已经成功地让这段代码在没有#include 的情况下工作。我确定我忽略了与#include 相关的内容...

此代码有效:

    #pragma margins(2,72)                                                  
    *#if 0!=0                                                              
    Test     DSECT                                                         
    Test@    DS A                                                          
    TestINT  DS F                                                          
    TestChar DS C                                                          
     .ago end                                                              
    *#endif                                                                
    *struct Test {                                                         
    *  void *Test1;                                                        
    *  int TestInt;                                                        
    *  char TestChar;                                                      
    *};                                                                    
    *#if 0!=0                                                              
    .end                                                                   
     MEND                                                                  
    *#endif                                                                
     #pragma nomargins

给出如下所示的编译器输出:

      207       |#pragma margins(2,72)                                            
      207       +                                                                 
      208       |#if 0!=0                                                         
      214       |#endif                                                           
      215       |struct Test {                                                    
      216       |  void *Test1;                                                   
    5650ZOS V2.1.1 z/OS XL C                          'SSAF.METALC.C(CKKTHING)'   


                                              * * * * *   S O U R C E   * * * * * 

     LINE  STMT                                                                   
                 *...+....1....+....2....+....3....+....4....+....5....+....6....+
      217       |  int TestInt;                                                   
      218       |  char TestChar;                                                 
      219       |};                                                               
      220       |#if 0!=0                                                         
      223       |#endif                                                           
      224       |#pragma nomargins                                                                                                    

但是,当我将代码放入这样的#include 文件时:

    EDIT       SSAF.METALC.H(CKKTEST)
    Command ===>                     
    ****** **************************
    000001 *#if 0!=0                 
    000002 Test     DSECT            
    000003 Test@    DS A             
    000004 TestINT  DS F             
    000005 TestChar DS C             
    000006  .ago end                 
    000007 *#endif                   
    000008 *struct Test {            
    000009 *  void *Test1;           
    000010 *  int TestInt;           
    000011 *  char TestChar;         
    000012 *};                       
    000013 *#if 0!=0                 
    000014 .end                      
    000015  MEND                     
    000016 *#endif                   
    ****** **************************

并将其包含在我的 Metal C 程序中:

    EDIT       SSAF.METALC.C(CKLTHING) - 01.00
    Command ===>                              
    000205 #include"ckkprolg.h"               
    000206                                    
    000207 #pragma margins(2,72)              
    000208  #include"ckktest.h"               
    000209  #pragma nomargins                   

我收到一堆错误消息:

      205       |#include"ckkprolg.h"               /* Include assembler macros needed                        
      206       |                                      for Metal C prolog and epilog  */                      
      207       |#pragma margins(2,72)                                                                        
      207       +                                                                                             
      208       |#include"ckktest.h"                                                                          
    *=ERROR===========>     CCN3275 Unexpected text 'struct' encountered.                                     
    *=ERROR===========>     CCN3166 Definition of function Test requires parentheses.                         
    *=ERROR===========>     CCN3275 Unexpected text 'void' encountered.                                       
    5650ZOS V2.1.1 z/OS XL C                          'SSAF.METALC.C(CKLTHING)'                    10/04/2019 


                                              * * * * *   S O U R C E   * * * * *                             

     LINE  STMT                                                                                               
                 *...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8....+....9...
    *=ERROR===========>     CCN3045 Undeclared identifier Test1.                                              
    *=ERROR===========>     CCN3275 Unexpected text 'int' encountered.                                        
    *=ERROR===========>     CCN3045 Undeclared identifier TestInt.                                            
    *=ERROR===========>     CCN3275 Unexpected text 'char' encountered.                                       
    *=ERROR===========>     CCN3045 Undeclared identifier TestChar.                                           
    *=ERROR===========>     CCN3046 Syntax error.                                                             
    *=ERROR===========>     CCN3273 Missing type in declaration of theESTAEXStatic.                           
      209       |#pragma nomargins                                                                            

4

1 回答 1

0

缺少包含文件#pragma margins。由于它是文件级指令,因此它需要存在于每个源文件中。请参阅IBM Knowledge Center,其中说:“#pragma margins指令指定的设置仅适用于找到它的源文件或包含文件。它对其他包含文件没有影响。”

于 2019-10-07T14:27:28.500 回答