[Info-vax] C limitations, was: Re: VMS process communication

Arne Vajhøj arne at vajhoej.dk
Mon Mar 27 09:21:25 EDT 2023


On 3/27/2023 8:27 AM, Simon Clubley wrote:
> = for assignment, versus == for comparison. (At least it's not PHP however,
> where you need to use === to get a sane comparison. :-))

C == is not that great either.

$ type eq.c
#include <stdio.h>
#include <stdlib.h>

#define TEST(a, b) printf(#a " == " #b " : %d\n", a == b)

int main()
{
     TEST(0, 0);
     TEST(0, 1);
     TEST(1, 0);
     TEST(1, 1);
     TEST(0, 0.0);
     TEST(0, 1.0);
     TEST(1, 0.0);
     TEST(1, 1.0);
     TEST(0, 0.1);
     TEST(0, 1.1);
     TEST(1, 0.1);
     TEST(1, 1.1);
     TEST(0, FALSE);
     TEST(0, TRUE);
     TEST(1, FALSE);
     TEST(1, TRUE);
     TEST(0, "ABC");
     TEST(0, NULL);
     TEST(1, "ABC");
     TEST(1, NULL);
     return 0;
}
$ cc eq

     TEST(1, "ABC");
....^
%CC-W-CVTDIFTYPES, In this statement, "1" of type "int", is being 
converted to "pointer to char".
at line number 26 in file DISK2:[ARNE]eq.c;1

     TEST(1, NULL);
....^
%CC-W-CVTDIFTYPES, In this statement, "1" of type "int", is being 
converted to "pointer to void".
at line number 27 in file DISK2:[ARNE]eq.c;1
$ link eq
%LINK-W-WRNERS, compilation warnings
         in module EQ file DISK2:[ARNE]eq.OBJ;2
$ run eq
0 == 0 : 1
0 == 1 : 0
1 == 0 : 0
1 == 1 : 1
0 == 0.0 : 1
0 == 1.0 : 0
1 == 0.0 : 0
1 == 1.0 : 1
0 == 0.1 : 0
0 == 1.1 : 0
1 == 0.1 : 0
1 == 1.1 : 0
0 == FALSE : 1
0 == TRUE : 0
1 == FALSE : 0
1 == TRUE : 1
0 == "ABC" : 0
0 == NULL : 1
1 == "ABC" : 0
1 == NULL : 0
$ type eq.php
<?php

function test($a, $b) {
     echo "$a == $b : " . ($a == $b) . "\r\n";
}

test(0, 0);
test(0, 1);
test(1, 0);
test(1, 1);
test(0, 0.0);
test(0, 1.0);
test(1, 0.0);
test(1, 1.0);
test(0, 0.1);
test(0, 1.1);
test(1, 0.1);
test(1, 1.1);
test(0, FALSE);
test(0, TRUE);
test(1, FALSE);
test(1, TRUE);
test(0, "ABC");
test(0, NULL);
test(1, "ABC");
test(1, NULL);

?>
$ php eq.php
0 == 0 : 1
0 == 1 :
1 == 0 :
1 == 1 : 1
0 == 0 : 1
0 == 1 :
1 == 0 :
1 == 1 : 1
0 == 0.1 :
0 == 1.1 :
1 == 0.1 :
1 == 1.1 :
0 ==  : 1
0 == 1 :
1 ==  :
1 == 1 : 1
0 == ABC : 1
0 ==  : 1
1 == ABC :
1 ==  :
$ type eq2.php
<?php

function test($a, $b) {
     echo "$a === $b : " . ($a === $b) . "\r\n";
}

test(0, 0);
test(0, 1);
test(1, 0);
test(1, 1);
test(0, 0.0);
test(0, 1.0);
test(1, 0.0);
test(1, 1.0);
test(0, 0.1);
test(0, 1.1);
test(1, 0.1);
test(1, 1.1);
test(0, FALSE);
test(0, TRUE);
test(1, FALSE);
test(1, TRUE);
test(0, "ABC");
test(0, NULL);
test(1, "ABC");
test(1, NULL);

?>
$ php eq2.php
0 === 0 : 1
0 === 1 :
1 === 0 :
1 === 1 : 1
0 === 0 :
0 === 1 :
1 === 0 :
1 === 1 :
0 === 0.1 :
0 === 1.1 :
1 === 0.1 :
1 === 1.1 :
0 ===  :
0 === 1 :
1 ===  :
1 === 1 :
0 === ABC :
0 ===  :
1 === ABC :
1 ===  :

Arne





More information about the Info-vax mailing list