[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