Path: utzoo!attcan!uunet!lll-winken!lll-lcc!ames!haven!adm!smoke!gwyn From: gwyn@smoke.BRL.MIL (Doug Gwyn ) Newsgroups: comp.std.c Subject: Re: #pragma Message-ID: <9430@smoke.BRL.MIL> Date: 18 Jan 89 22:35:39 GMT References: <8770@bloom-beacon.MIT.EDU> <12570002@hpclwjm.HP.COM> Reply-To: gwyn@brl.arpa (Doug Gwyn (VLD/VMB) ) Organization: Ballistic Research Lab (BRL), APG, MD. Lines: 44 In article <12570002@hpclwjm.HP.COM> walter@hpclwjm.HP.COM (Walter Murray) writes: >I'm in the same boat. Maybe it's time for someone to post a summary/update >on the #pragma question. There isn't much to tell. #pragma is constrained by the Standard only insofar as it must pass through the preprocessing grammar. I believe several vendors are interested in establishing some additional agreement about how to format #pragma and in setting up some way of registering pragmas in order to avoid conflict among vendors. Such agreements will not be part of the ANSI C standard, however. There may be a special interest group working on this; I don't know. >1. A #pragma causes an implementation to behave in an implementation-defined > manner. Could that include, for example, following unsigned-preserving > promotion rules, or must the behavior still be ANSI? A non-conforming implementation can do whatever it pleases. A conforming implementation must follow ALL the rules in the Standard; permitting implementation-defined behavior in specific circumstances is not to be interpreted as granting license to ignore other relevant specifications. >2. A strictly conforming program shall not produce output dependent on > any implementation-defined behavior. Does it follow that a strictly > conforming program shall not use a #pragma? Only if it affects the output of the program... We actually wanted to say that its "meaning" doesn't depend on any unspecified, undefined, or implementation-defined behavior, but "output" was the best we could come up with in pure standards language. In practice, there is NO portable use of #pragma. A program's output conceivably MIGHT depend on SOME implementation's handling of a #pragma; therefore #pragma ought not to be used in a strictly conforming program (i.e. one intended specifically to be maximally portable). Really, #pragma is intended to give advice to the compiler such as: produce a listing optimize this block in a certain way assign this data to a certain kind of storage It can undoubtedly be made to do many other things, not all of them advisable.