| Deutsch English Français Italiano |
|
<v63t7d$28fl8$4@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: James Kuyper <jameskuyper@alumni.caltech.edu> Newsgroups: comp.std.c Subject: Re: May a string span multiple, independent objects? Date: Wed, 3 Jul 2024 12:11:25 -0400 Organization: A noiseless patient Spider Lines: 26 Message-ID: <v63t7d$28fl8$4@dont-email.me> References: <20240703141500$00ed@vinc17.org> <lel8ndF7f8iU1@mid.dfncis.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Injection-Date: Wed, 03 Jul 2024 18:11:25 +0200 (CEST) Injection-Info: dont-email.me; posting-host="d7676d8b49e8d1fc9338a815d9368d40"; logging-data="2375336"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+NC7Wtwv3pl/TuYgzxOTVgFNVv/N/3ZLY=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:grw0h/5R+2lm0UQA95WthKhSXcc= Content-Language: en-US In-Reply-To: <lel8ndF7f8iU1@mid.dfncis.de> Bytes: 2350 On 7/3/24 11:23, Hans-Bernhard Bröker wrote: > Am 03.07.2024 um 16:31 schrieb Vincent Lefevre: >> ISO C17 (and C23 draft) 7.1.1 defines a string as follows: "A string >> is a contiguous sequence of characters terminated by and including >> the first null character." >> >> But may a string span multiple, independent objects that happens >> to be contiguous in memory? >> >> For instance, is the following program valid and what does the ISO C >> standard say about that? > > Comparing pointers pointing at distinct objects is already invalid (for > some interpretation of "invalid") Comparison of valid pointers that point at distinct objects has well-defined behavior. Such operations would be pretty useless if that weren't the case, since they only compare the locations of those objects - if they were allowed only for objects that are not distinct, the locations would necessarily be the same, so, ==, <= and >= would always return true, and !=, <, and > would always return false. Furthermore, comparison for equality (as opposed to comparison for relative order) is permitted even for objects that aren't sub-objects of the same larger object. The problems with such code involves incrementing and dereferencing such pointers, not comparing them.